Diese Anleitung befasst sich mit den Feinheiten des strengen Gleichstellungsoperators von JavaScript (===
), wie in dem Abschnitt "Strict Equality -Vergleich der ECMAScript -Spezifikation" definiert. Erforschen wir Schritt für Schritt seine Funktionalität:
===
Algorithmus: ein detailliertes Aussehen Der Betreiber ===
verwendet den folgenden Algorithmus, um die Gleichheit zu bestimmen:
Typ Überprüfen Sie: Der Bediener vergleicht zuerst die Typen der beiden Werte. Wenn sich die Typen unterscheiden, gibt es sofort false
zurück. Der Typ -Matching geht nur dann zum nächsten Schritt, wenn die Typen identisch sind.
Typ-spezifischer Vergleich:
Zahlen:
NaN === NaN
bewertet false
(ein entscheidender Punkt der Divergenz). true
. 0
und -0
werden als gleich angesehen (true
). Zeichenfolgen: Charakter-für-Charakter-Vergleich bestimmt Gleichheit. Identische Sequenzen ergeben true
; Ansonsten false
.
booleans: true === true
und false === false
beide return true
. Ansonsten false
.
Objekte (Arrays und Funktionen enthalten): ===
Überprüfungen für Referenzgleichheit . Nur wenn beide Werte auf denselben Speicherort (dasselbe Objekt) verweisen, wird true
null
und undefined
: null === null
und undefined === undefined
return true
. null === undefined
ist jedoch false
aufgrund von Typunterschieden.
NaN === NaN
false
Dies ist eine häufige Quelle der Verwirrung. Die Spezifikation definiert NaN
(nicht-a-nummer) als ungleich für sich. Dies liegt daran, dass NaN
ein ungültiges oder undefiniertes numerisches Ergebnis darstellt; Der Vergleich von zwei undefinierten Ergebnissen wie gleich fehlt die logische Kohärenz.
Beispiel:
<code class="language-javascript">NaN === NaN; // false</code>
Verwenden Sie NaN
oder Number.isNaN()
: Object.is()
zuverlässig nach
<code class="language-javascript">Number.isNaN(NaN); // true Object.is(NaN, NaN); // true</code>
0 === -0
Warum true
ist
0
Die Spezifikation behandelt -0
und 1 / 0
als gleichwertig, da ihr Verhalten in den meisten mathematischen Operationen nicht zu unterscheiden ist. In bestimmten Szenarien bestehen jedoch subtile Unterschiede (z. B. Infinity
ergibt 1 / -0
, während -Infinity
in Object.is()
). Verwenden Sie für Situationen, die Differenzierung erfordern,
<code class="language-javascript">NaN === NaN; // false</code>
beim Vergleich von Objekten bewertet ===
Referenzgleichheit . Zwei Objekte mit identischen Inhalten werden nicht als gleich angesehen, es sei denn, sie sind dasselbe Objekt im Speicher:
<code class="language-javascript">Number.isNaN(NaN); // true Object.is(NaN, NaN); // true</code>
Aber:
<code class="language-javascript">Object.is(+0, -0); // false</code>
Weitere Untersuchung von JavaScript -Grundlagen
Das obige ist der detaillierte Inhalt vonEntschlüsseln des '===' von JavaScript. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!