Operatory relacyjne ECMAScript
- Poprzednia strona Operator dodawania
- Następna strona Operator równości
Operatorzy relacyjne wykonują operacje porównania. Każdy operator relacyjny zwraca wartość logiczną.
Zwykły sposób porównania
Operatorzy relacyjne mniejszy, większy, mniejszy lub równy oraz większy lub równy wykonują operacje porównania dwóch liczb, w sposób podobny do operacji porównania arytmetycznego.
Każdy operator relacyjny zwraca wartość logiczną:
var bResult1 = 2 > 1 //true var bResult2 = 2 < 1 //false
Jednak, gdy stosujemy operatory relacyjne do dwóch ciągów znaków, ich zachowanie jest inne. Wielu ludzi uważa, że "mniej niż" oznacza "przed literą w porządku alfabetycznym", a "więcej niż" oznacza "za literą w porządku alfabetycznym", ale to nie jest prawda. Dla ciągów znaków, każdy znak w pierwszym ciągu jest porównywany z kodem znaku w odpowiedniej pozycji drugiego ciągu. Po zakończeniu operacji porównania zwracana jest wartość logiczna. Problem polega na tym, że kody znaków dużych liter są mniejsze niż kody znaków małych liter, co może prowadzić do następujących sytuacji:
var bResult = "Blue" < "alpha"; alert(bResult); //Wyświetl true
W powyższym przykładzie, ciąg znaków "Blue" jest mniejszy od "alpha", ponieważ kod znaku B wynosi 66, a kod znaku a wynosi 97. Aby uzyskać wynik porównania zgodny z rzeczywistym porządkiem alfabetycznym, konieczne jest przekształcenie obu liczb na ten sam format wielkości liter (wielkie lub małe), a następnie porównanie ich:
var bResult = "Blue".toLowerCase() < "alpha".toLowerCase(); alert(bResult); //Wyjście false
Przekształcenie obu operandów na małe litery zapewnia poprawne zidentyfikowanie, że "alpha" znajduje się przed "Blue" w kolejności alfabetycznej.
Porównanie liczby i ciągu znaków
Inna trudna sytuacja pojawia się przy porównywaniu dwóch liczb w formie ciągów znaków, np.:
var bResult = "25" < "3"; alert(bResult); //Wyjście "true"
Powyższy kod porównuje ciąg znaków "25" i "3". Obie operandy są ciągami znaków, więc porównuje się ich kodowanie znaków (kod znaku "2" to 50, kod znaku "3" to 51).
Ale co, jeśli jeden z operandów jest liczbą, wynik jest interesujący:
var bResult = "25" < 3; alert(bResult); //Wyjście "false"
Tutaj, ciąg znaków "25" zostanie przekształcony na liczbę 25 i porównany z liczbą 3, wynik jest zgodny z oczekiwaniami.
Każdy raz, gdy porównujemy liczbę i ciąg znaków, ECMAScript przekształca ciąg znaków na liczbę i porównuje je według kolejności numerycznej.
Ale co, jeśli ciąg znaków nie można przekształcić na liczbę? Oto przykład:
var bResult = "a" < 3; alert(bResult);
Czy możesz przewidzieć, co wyjdzie z tego kodu? Litera "a" nie może być przekształcona na znaczący numer. Jednak, jeśli wywołamy na niej metodę parseInt(), zwróci NaN. Zgodnie z zasadami, każdy operator relacyjny zawierający NaN musi zwrócić fałsz, więc ten kod również wyświetla fałsz:
var bResult = "a" >= 3; alert(bResult);
Zwykle, jeśli wynik operacji mniejszy niż zwraca fałsz, to operacja większa lub równa musi zwrócić prawdę, ale jeśli liczba jest NaN, sytuacja wygląda inaczej.
- Poprzednia strona Operator dodawania
- Następna strona Operator równości