warum null == undefined ist in JavaScript wahr

7

Wenn wir alert(null==undefined) ausgeben, wird true angezeigt.

Was ist der logische Grund dafür?

Ist das etwas, das in Javascript fest codiert ist oder gibt es eine Erklärung dafür?

    
Nav 17.05.2013, 11:22
quelle

4 Antworten

15

Die Sprachspezifikation sagt ausdrücklich :

  

Wenn x null ist und y undefiniert ist, gebe true

zurück

Ich kenne keine Aufzeichnungen des Sprachdesignprozesses, die die Gründe für diese Entscheidung erklären, aber == hat Regeln für die Handhabung verschiedener Typen, und "null" und "undefined" sind beides Dinge, die "nichts" bedeuten ", so macht es gleich intuitiv macht Sinn.

(Wenn du nicht fiedeln willst, benutze stattdessen === ).

    
Quentin 17.05.2013, 11:27
quelle
4

Aus dem gleichen Grund, dass 0 == "0" - javascript falsch geschrieben ist - wenn etwas in etwas anderes umgewandelt werden kann, dann wird es so lange sein, bis Sie ===

verwenden %Vor%

Wird Ihnen falsch geben.

Warum diese bestimmten Konvertierungen passieren - die Antwort ist ganz einfach "die Spezifikation sagt, dass das passieren soll". Es muss keinen anderen Grund geben, als "weil es so sagt", warum sich Programmiersprache auf bestimmte Arten verhält.

    
PhonicUK 17.05.2013 11:26
quelle
3

Die Verwendung des double-equal-Operators zwingt Javascript zur Eingabe von Zwangsbedingungen.

Mit anderen Worten, wenn Sie x == y ausführen, wenn x und y nicht vom selben Typ sind, wird JavaScript einen Wert vor dem Vergleich in einen anderen umwandeln, so wie wenn String und Zahl verglichen werden Immer in eine Zahl umwandeln und dann

vergleichen

Aus diesem Grund können viele Vergleiche gemischter Typen in JavaScript zu unerwarteten oder kontraintuitiven Ergebnissen führen.

Wenn Sie Vergleiche in JavaScript durchführen möchten, ist es normalerweise eine bessere Idee, den Triple-Equival-Operator === anstelle von double-equal zu verwenden. Dies macht keinen Typuszwang; Wenn die Typen unterschiedlich sind, wird false zurückgegeben. Dies ist in der Regel, was Sie brauchen.

Sie sollten nur double-equal verwenden, wenn Sie absolut sicher sind, dass Sie es brauchen.

    
Spudley 17.05.2013 11:29
quelle
-3

Der Operator == vergleicht die Typen nicht. null und undefined beide geben false zurück. Aus diesem Grund prüft Ihr Code, ob false gleich false ist.

%Vor%

Allerdings sind ihre Typen nicht gleich.

%Vor%

Aus diesem Grund gibt die nächste Anweisung false zurück, da der Vergleichsoperator === sowohl die Typen als auch deren Werte überprüft.

%Vor%     
Broxzier 17.05.2013 11:33
quelle

Tags und Links