2013-04-19 29 views
5

Nach den Mozilla docs:Warum ist NaN! = Undefiniert?

Der undefinierte Wert konvertiert in NaN, wenn in einem numerischen Kontext verwendet.

Also, warum die beiden folgenden gleichzusetzen wahr ?:

NaN != undefined 
NaN !== undefined 

ich Nan !== undefined verstehen konnte, wie der Variablentyp unterschiedlich sein würde ...

+8

Weil 'NaN' * gar nichts ist *, auch nicht für sich selbst. Daher wird eine 'isNaN'-Funktion dafür erzeugt. Es macht keinen Sinn, Vergleiche anzustellen. – Joseph

Antwort

12

NaN ist definitions " Keine Nummer "

Das bedeutet nicht, dass es nicht definiert ist - es ist eindeutig definiert - aber undefined in einem Sinne, dass es nicht eine Nummer ist.

+0

Ich kenne die Definition, es ist die Art und Weise, in der es in den Mozilla-Dokumenten erklärt wird: "Der undefinierte ** Wert ** konvertiert zu NaN, wenn er im numerischen Kontext verwendet wird."Was mich dazu bringt, zu denken, dass es nicht definiert ist, aber als eine Nummer gecastet wird ... – oodavid

+0

@oodavid das Gleiche gilt für Stringcasts :) –

2

Dies liegt daran, nach Section 4.3.23 of ECMAScript Language SpecificationNaN ist definiert als:

Zahlenwert, der eine IEEE 754 „Not-a-Number“ Wert ist etwas

So ist es eine Zahl und nicht undefiniert oder null. Der Wert wird weiter unter Section 8.3

erläutert ...; In ECMAScript-Code sind alle NaN-Werte nicht voneinander zu unterscheiden.

Gleichheitsvergleiche mit NaN sind in Section 11.9.3 definiert:

Der Vergleich x == y, wobei x und y Werte sind, erzeugt, wahr oder falsch. Ein solcher Vergleich wird wie folgt ausgeführt: Wenn Type (x) Zahl ist, dann gilt:

Wenn x NaN ist, return false.

Wenn y NaN ist, geben Sie false zurück.

Für die Zwecke des Vergleichs Sie isNaN() stattdessen verwenden sollten:

isNaN(NaN) 
// true 

aktualisieren

Der Wert von +undefined ist not-a-Zahl, aber es ist dennoch eine Zahl (wenn auch mit ein spezieller Wert) und daher nicht undefiniert. Genauso wie das Umwandeln von undefined in einen String einen definierten Stringwert ergibt.

Verwandte Themen