Scud rakiety mobilne rakiety balistyczne krótkiego zasięgu na klawiaturze laptopa renderowanie 3D

Operatory porównania w JavaScript – kompletny przewodnik

5 min. czytania

Operatory porównania w JavaScript to podstawowe narzędzia do sprawdzania relacji między wartościami (równość, nierówność, większe/mniejsze). Zawsze zwracają wartość logiczną true lub false, dzięki czemu są kluczowe w instrukcjach warunkowych if, else if i else.

W tym przewodniku poznasz pełną listę operatorów, różnice między porównaniem luźnym a ścisłym, praktyczne przykłady, pułapki związane z koercją typów oraz dobre praktyki. Nauczysz się pisać bezpieczniejszy, bardziej przewidywalny kod.

Lista wszystkich operatorów porównania

Poniższa tabela zbiera osiem podstawowych operatorów porównań w JavaScript wraz z krótkim opisem i przykładem:

Operator Nazwa Opis Przykład Wynik
== Równość (luźna) Porównuje po konwersji typów 5 == '5' true
!= Nierówność (luźna) Porównuje po konwersji typów 5 != '5' false
=== Równość ścisła Porównuje wartość i typ 5 === '5' false
!== Nierówność ścisła Różna wartość lub typ 5 !== '5' true
> Większy niż Lewa strona > prawa strona 5 > 3 true
< Mniejszy niż Lewa strona < prawa strona 3 < 5 true
>= Większy lub równy Lewa strona >= prawa strona 5 >= 5 true
<= Mniejszy lub równy Lewa strona <= prawa strona 5 <= 5 true

Operatory porównania mają określony priorytet w wyrażeniach i zawsze zwracają boolean.

Luźne porównanie (== i !=) vs ścisłe (=== i !==) – kluczowa różnica

Największą pułapką dla początkujących jest koercja typów, czyli automatyczna konwersja zachodząca przy == i !=. Próba dopasowania typów może prowadzić do zaskakujących rezultatów.

Przykład luźnego porównania:

console.log(5 == '5'); // true – '5' konwertowane na 5
console.log(true == 1); // true – true konwertowane na 1
console.log(0 == false); // true – false konwertowane na 0
console.log('' == 0); // true – pusty string na 0
console.log(null == undefined); // true – specjalny przypadek

Przykład ścisłego porównania:

console.log(5 === '5'); // false – różne typy (number vs string)
console.log(true === 1); // false
console.log(0 === false); // false
console.log('' === 0); // false
console.log(null === undefined); // false

Najlepsza praktyka: zawsze używaj === i !==. Są bezpieczniejsze, bardziej czytelne i eliminują błędy wynikające z niejawnej konwersji typów.

Porównywanie liczb i stringów

Dla liczb operatory działają intuicyjnie:

let x = 10;
let y = 5;
console.log(x > y); // true
console.log(x <= y); // false

Stringi porównywane są leksykograficznie (alfabetycznie, według kodów Unicode):

console.log('apple' < 'banana'); // true – 'a' < 'b'
console.log('Z' > 'a'); // false – wielkie litery mają mniejsze kody Unicode niż małe
console.log('10' < '2'); // true – '1' < '2' (nie numerycznie!)

Uwaga: '10' < '2' zwraca true, ponieważ porównuje się znaki, nie wartości liczbowe. Do porównań numerycznych użyj parseInt() lub Number().

Porównywanie booleanów, null i undefined

Booleany: dla porównań luźnych true == 1, a false == 0; porównania ścisłe === rozróżniają typy, więc nie uznają ich za równe liczbom.

null i undefined: tylko w porównaniu luźnym null == undefined jest true; w porównaniu ścisłym null === undefined to false. null oznacza „brak wartości”, a undefined – „niezainicjalizowaną zmienną”.

Przykład zachowania w porównaniach numerycznych:

console.log(null > 0); // false
console.log(null == 0); // false – null nie jest konwertowany do 0 w ==
console.log(undefined == 0); // false

Porównywanie obiektów i tablic

Operatory porównania nie porównują zawartości obiektów, a jedynie referencje (adres w pamięci).

let a = { x: 1 };
let b = { x: 1 };
console.log(a == b); // false – różne obiekty
console.log(a === b); // false

let c = a;
console.log(a === c); // true – ta sama referencja

Do porównań zawartości użyj np. JSON.stringify() (proste przypadki) lub bibliotek typu Lodash.

Praktyczne przykłady użycia w kodzie

Instrukcje warunkowe:

let wiek = 18;
let maPrawoJazdy = wiek >= 18; // true

if (wiek >= 18 && wiek < 65) {
console.log("Możesz pracować!");
} else if (wiek < 18) {
console.log("Jesteś nieletni.");
} else {
console.log("Emerytura!");
}

Walidacja formularza:

let email = "[email protected]";
let haslo = "pass123";

if (haslo.length >= 8 && haslo !== "12345678") { // Ścisłe porównanie
console.log("Hasło OK");
} else {
console.log("Hasło za słabe");
}

Pętla z warunkiem:

for (let i = 0; i < 10; i++) {
if (i > 5) {
console.log("Duże i:", i);
}
}

Pułapki i błędy początkujących

Oto najczęstsze problemy, na które warto uważać:

  1. Nieoczekiwana koercja[] == false zwraca true (pusty array konwertowany do ”), unikaj ==;
  2. NaNNaN === NaN to false, użyj Number.isNaN() lub isNaN();
  3. Stringi numeryczne'02' < '10' to true (porównanie leksykograficzne);
  4. Łańcuchowanie porównań1 < 2 < '3' to true (bo 1 < 2true1, a potem 1 < '3'true).

Dobre praktyki i wskazówki

Stosuj poniższe zasady, aby pisać przewidywalny i czytelny kod:

  • Używaj zawsze === i !== – to standard w nowoczesnym JS;
  • Konwertuj typy jawnie – np. Number(str) === 5 zamiast porównań luźnych;
  • Testuj edge case’ynull, undefined, NaN, puste stringi;
  • Wykorzystuj ES6+Object.is(a, b) do precyzyjnych porównań (rozróżnia 0 i -0, a Object.is(NaN, NaN) zwraca true);
  • Debuguj w konsoliconsole.log(typeof x, x === y).

Podsumowanie kluczowych zasad

Krótka ściąga z wyboru właściwego podejścia w najczęstszych sytuacjach:

Sytuacja Użyj Dlaczego
Bezpieczne porównanie === / !== Brak konwersji, czytelny kod
Porównanie stringów > / < Porządek leksykograficzny
Obiekty i tablice Porównanie referencji Do zawartości użyj deep equal
Liczby vs stringi Jawna konwersja + === Unikasz pułapek koercji

Ćwicz na własnym kodzie! Otwórz konsolę przeglądarki (F12) i testuj przykłady – im szybciej opanujesz operatory porównań, tym mniej błędów pojawi się w Twoich warunkach.