KWALIFIKACJA INF3 - STYCZEŃ 2015

PYTANIE NR 39.
Który fragment kodu JavaScript zwróci wartość true?
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
W JavaScript operator > dla łańcuchów porównuje je leksykograficznie, znak po znaku, według punktów kodowych Unicode. Dla "def" i "abc" już pierwszy znak rozstrzyga: "d" jest większe niż "a", więc całe wyrażenie zwraca true.

Pełne wyjaśnienie:

W JavaScript operator relacyjny > nie działa wyłącznie dla liczb. Gdy obie strony są łańcuchami znaków (napisami), wykonywane jest porównanie leksykograficzne, czyli "słownikowe": analizuje się kolejne znaki od początku i porównuje ich wartości (punkty kodowe w Unicode). Wynik zależy od pierwszego miejsca, w którym napisy się różnią.

Dla wyrażenia "def" > "abc" porównanie zaczyna się od pierwszego znaku:

  • pierwszy znak "def" to d,
  • pierwszy znak "abc" to a.

Ponieważ d ma większą wartość kodową niż a, całe porównanie jest prawdziwe i zwraca true. Nie trzeba sprawdzać kolejnych liter, bo wynik jest już przesądzony na pierwszym znaku.

Dlaczego pozostałe propozycje są błędne?

  • "ab" > "c" zwraca false, bo już na pierwszym znaku "a" jest mniejsze niż "c". Długość napisu nie "ratuje" wyniku.
  • "abc" > "def" zwraca false, bo "a" jest mniejsze niż "d" (odwrotny kierunek niż w poprawnej opcji).
  • "a" > "b" zwraca false, bo "a" jest mniejsze niż "b".

Wskazówka egzaminacyjna: przy porównaniach napisów z użyciem > i < zawsze sprawdzaj pierwszą różniącą się literę. Jeśli potrzebujesz porównania zgodnego z regułami językowymi (np. polskie znaki, ignorowanie wielkości liter), zwykle używa się metod takich jak localeCompare lub sortowania z odpowiednią funkcją porównującą.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
Operator > może porównywać także napisy. Dla dwóch łańcuchów wynik zależy od porządku leksykograficznego: porównywane są kolejne znaki od początku według ich wartości (punkty kodowe Unicode). O wyniku decyduje pierwsza różnica.
Porównanie zaczyna się od pierwszych znaków: "d" i "a". Ponieważ "d" ma większą wartość kodową niż "a", całe porównanie jest prawdziwe i zwraca true. Nie ma znaczenia, co jest dalej w napisach, jeśli pierwszy znak już rozstrzyga.
Zwykle nie wprost. Najpierw liczy się pierwsza różnica w znakach. Długość ma znaczenie dopiero wtedy, gdy jeden napis jest prefiksem drugiego (np. "ab" i "abc"). Wtedy krótszy napis jest traktowany jako "mniejszy".
Najczęściej myli się porównanie napisów z porównaniem liczb (np. zakłada się, że dłuższy napis jest większy). Błędem jest też ignorowanie wielkości liter i znaków narodowych: porządek wynika z kodów znaków, a nie z "alfabetu" w języku polskim.
Gdy potrzebujesz porównania językowego (np. uwzględniającego reguły lokalne), użyj metody localeCompare lub odpowiednio skonfiguruj sortowanie. Pozwala to porównywać napisy zgodnie z wybraną lokalizacją, a nie tylko według punktów kodowych.
Tak, zasady porównywania napisów operatorem > wynikają ze specyfikacji języka JavaScript (ECMAScript). Dlatego zachowanie jest takie samo w różnych środowiskach uruchomieniowych, o ile realizują one standard.
Zaskoczenie wynika z intuicji "ab jest dłuższe, więc większe". W rzeczywistości porównywane są pierwsze znaki: "a" i "c". Ponieważ "a" jest mniejsze niż "c", całe wyrażenie zwróci false, niezależnie od dalszych znaków.
Na egzaminie porównaj pierwsze różniące się litery. W praktyce developerskiej możesz użyć localeCompare albo przetestować w konsoli. Pamiętaj, że wielkie litery i znaki specjalne mogą mieć inną kolejność niż oczekiwana alfabetycznie.
Jest poprawne technicznie, ale trzeba świadomie wiedzieć, że to porządek po kodach znaków. Do sortowania "dla użytkownika" lepsze są funkcje porównujące z lokalizacją. Operator > jest natomiast wygodny w prostych warunkach i testach.
Przećwicz przypadki: liczba vs napis, napis vs napis, równość (== i ===) oraz relacje (>, <). Naucz się reguły "pierwszy różniący się znak decyduje" i pamiętaj o wpływie wielkości liter. Kilka testów w konsoli zwykle utrwala temat.
info

To pytanie poprawnie rozwiązuje 59% zdających egzamin. średnie

Specjaliści zwracają uwagę: "W JavaScript operator &gt; dla łańcuchów porównuje je leksykograficznie, znak po znaku, według punktów kodowych Unicode."

Źródła:

  • MDN Web Docs: Greater than (>) operator (JavaScript) — https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Greater_than (accessed 2026-02-27)
  • MDN Web Docs: String — https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String (accessed 2026-02-27)
  • ECMA-262 (ECMAScript Language Specification): Abstract Relational Comparison — https://tc39.es/ecma262/ (accessed 2026-02-27)

Materiały:

  • Dokumentacja MDN: operatory porównania w JavaScript
  • Dokumentacja MDN: typ String i metody porównywania (np. localeCompare)
  • Specyfikacja ECMAScript: zasady abstrakcyjnego porównania relacyjnego

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego