Operatory równości ECMAScript
- Poprzednia strona Operatory relacyjne
- Następna strona Operatory warunkowe
Ocena równości dwóch zmiennych jest bardzo ważnym operatorem w projektowaniu programów. Podczas przetwarzania wartości podstawowych ta operacja jest dość prosta, ale gdy涉及 obiekty, zadanie jest nieco bardziej skomplikowane.
ECMAScript dostarcza dwa zestawy operatorów równości: znak równości i znak różny są używane do przetwarzania wartości podstawowych, pełny znak równości i pełny znak różny są używane do przetwarzania obiektów.
Znak równości i znak różny
W ECMAScript znak równości jest reprezentowany przez podwójny znak równości (==), zwraca prawdę, gdy i tylko gdy dwa operandy są równe. znak różny jest reprezentowany przez znak wykrzyknik i znak równości (!=), zwraca prawdę, gdy i tylko gdy dwa operandy są różne. Aby określić, czy dwa operandy są równe, oba te operatorzy przeprowadzają przekształcenie typów.
Zasady przekształcania typów są następujące:
- Jeśli operand jest wartością Boolean, przed sprawdzeniem równości należy ją przekształcić w wartość numeryczną. fałsz przekształca się w 0, a prawda w 1.
- Jeśli jeden z operandów jest stringiem, a drugi liczbą, przed sprawdzeniem równości należy spróbować przekształcić string w liczbę.
- Jeśli jeden z operandów jest obiektem, a drugi stringiem, przed sprawdzeniem równości należy spróbować przekształcić obiekt w string.
- Jeśli jeden z operandów jest obiektem, a drugi liczbą, przed sprawdzeniem równości należy spróbować przekształcić obiekt w liczbę.
Podczas porównywania ten operator również przestrzega następujących zasad:
- Wartości null i undefined są równe.
- W sprawdzaniu równości nie można przekształcać null i undefined w inne wartości.
- Jeśli któryś z operandów jest NaN, znak równości zwróci fałsz, a znak różny zwróci prawdę.
- Jeśli obie operandy są obiektami, porównywane są ich wartości referencyjne. Jeśli obie operandy wskazują na ten sam obiekt, znak równości zwraca prawdę, w przeciwnym razie operandy są różne.
Ważne ostrzeżenie:Nawet jeśli obie liczby są NaN, znak równości zwraca fałsz, ponieważ zgodnie z zasadami, NaN nie jest równe NaN.
Poniższa tabela przedstawia niektóre szczególne przypadki oraz ich wyniki:
wyrażenie | wartość |
---|---|
null == undefined | true |
"NaN" == NaN | false |
5 == NaN | false |
NaN == NaN | false |
NaN != NaN | true |
false == 0 | true |
true == 1 | true |
true == 2 | false |
undefined == 0 | false |
null == 0 | false |
"5" == 5 | true |
Pełne i niepełne znaki równości
Pełne i niepełne znaki równości są podobne do znaków równości i niejawnych znaków. Te operatory robią to samo co znaki równości i niejawne znaki, ale nie wykonują konwersji typów przed sprawdzaniem równości.
Pełne znaki równości są reprezentowane przez trzy znaki równości (===), zwracają true tylko w przypadku, gdy liczby są równe bez konieczności konwersji typów.
Na przykład:
var sNum = "66"; var iNum = 66; alert(sNum == iNum); //Wypisanie "true" alert(sNum === iNum); //Wypisanie "false"
W tym kodzie, pierwszy alert używa znaku równości do porównania ciągu "66" z liczbą 66, wypisując "true". Jak już wcześniej wspomniano, to dlatego, że ciąg "66" zostanie przekształcony w liczbę 66, a następnie porównany z inną liczbą 66. Drugi alert używa pełnych znaków równości do porównania ciągu i liczby bez konieczności konwersji typów, oczywiście, ciąg nie jest równy liczbie, więc wypisuje "false".
Niejawne znaki są reprezentowane przez znak wykrzyknik plus dwa znaki równości (!==), zwracają true tylko w przypadku, gdy liczby są różne bez konieczności konwersji typów.
Na przykład:
var sNum = "66"; var iNum = 66; alert(sNum != iNum); //Wypisanie "false" alert(sNum !== iNum); //Wypisanie "true"
Tutaj, pierwszy alert używa niejawnych znaków, aby przekształcić ciąg "66" w liczbę 66, co sprawia, że jest ona równa drugiemu licznikowi 66. Dlatego wynik obliczeń to "false", ponieważ dwa liczniki są równe. Drugi alert używa niejawnych znaków. To pytanie brzmi: "sNum" różni się od "iNum"? Odpowiedź na to pytanie to: tak (true), ponieważ sNum to ciąg, a iNum to liczba, które z pewnością różnią się od siebie.
- Poprzednia strona Operatory relacyjne
- Następna strona Operatory warunkowe