Operatory równości ECMAScript

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.