Lassen Sie mich zunächst darauf hinweisen, dass dies NaN
ein ganz besonderer Wert ist: Per Definition ist er nicht gleich sich selbst. Das kommt vom IEEE-754-Standard, auf den sich JavaScript-Zahlen stützen. Der Wert "keine Zahl" ist niemals gleich sich selbst, selbst wenn die Bits genau übereinstimmen. (Was in IEEE-754 nicht unbedingt der Fall ist, ermöglicht es mehrere unterschiedliche "keine Zahl" -Werte.) Aus diesem Grund wird dies sogar angezeigt. Alle anderen Werte in JavaScript sind gleich, NaN
ist nur etwas Besonderes.
... fehlt mir ein Wert in JavaScript, der für x! == x true und für x! = x false zurückgibt?
Nein, du bist nicht. Der einzige Unterschied zwischen !==
und !=
besteht darin, dass letztere bei Bedarf Typzwang ausüben, um die Typen der Operanden gleich zu machen. In x != x
sind die Typen der Operanden die gleichen und daher genau die gleichen wie x !== x
.
Dies ist vom Beginn der Definition der abstrakten Gleichheitsoperation an klar :
- ReturnIfAbrupt (x).
- ReturnIfAbrupt (y).
Wenn Typ (x) mit Typ (y) identisch ist, dann
Geben Sie das Ergebnis der Durchführung eines strengen Gleichheitsvergleichs x === y zurück.
...
Die ersten beiden Schritte sind grundlegende Sanitärinstallationen. In der Tat besteht der allererste Schritt ==
darin, zu prüfen, ob die Typen gleich sind, und wenn ja, dies ===
stattdessen zu tun . !=
und !==
sind nur negierte Versionen davon.
Wenn Flanagan also richtig ist, dass nur NaN
wahr geben wird x !== x
, können wir sicher sein, dass es auch wahr ist, dass nur NaN
wahr geben wird x != x
.
Viele JavaScript-Programmierer verwenden ===
und !==
vermeiden standardmäßig einige Fallstricke im Zusammenhang mit dem Typenzwang, den die losen Operatoren ausüben, aber in diesem Fall gibt es nichts zu lesen, was Flanagan mit dem strengen oder losen Operator zu tun hat.
!==
Schecks gegenüber!=
Schecks bevorzugt . Soweit mir bekannt ist, gibt es keinen anderen Wert, wox != x
. Es gibt jedoch zwei unterschiedliche Gruppen von JavaScript-Entwicklern: diejenigen, die es vorziehen,!=
und diejenigen, die es bevorzugen!==
, sei es aus Gründen der Geschwindigkeit, Klarheit, Ausdruckskraft usw.