2014-12-24 3 views
22

Ich weiß, dass null ein Objekt ohne Attribute oder Funktionen ist.Warum (null == false) und (null == true) geben beide false zurück?

Allerdings bin ich verwirrt, warum console.log(null == false); und console.log(null == true); beide falsch zurückgeben. Wie lauten die Umrechnungsregeln zwischen null und boolean?

+5

Sie beide gleich falsch, weil null nicht gleich wahr oder falsch tut. Genau wie "1" nicht gleich "Pizza" oder "{}". Wenn es in If-Anweisungen alleine verwendet wird, wird es auf Boolean gezwungen, weil es ein falscher Wert ist. –

+0

Null ist ein Literal und false ist ein Boolescher Wert, beide sind untrennbare Typen –

+4

weil JavaScript –

Antwort

32

Dies liegt daran, die Abstract Equality Comparison Algorithm das erfordert, wenn Type(x) oder Type(y) einen Booleschen im Ausdruck ist x == y dann der Boolesche Wert sein sollte über ToNumber zu einer Zahl gezwungen, diekonvertiertbis 1 und false bis +0.

Dies bedeutet, dass ein Vergleich von true == something oder something == true Ergebnisse in 1 == something oder something == 1 (true und 1 mit false und +0 für false ersetzen).

The Null type vergleicht nicht als gleich 1 oder +0 (in der Tat ist null nur vergleichbar mit undefined in der AECA).

Es gibt eine detaillierte Diskussion aller verschiedenen Arten der Gleichheit in JavaScript auf MDN, die es wert ist, betrachtet zu werden, wenn Sie mehr wissen möchten.

Wenn Sie jedoch null zu einer Reihe coerce ist es coerced to +0 so +null == falsetrue tatsächlich zurückgibt.

+0

Vielen Dank, ich habe eine weitere Verwirrung, ich weiß, dass 'isNaN (null)' gleich 'false' und' Number (null) 'ist gleich' 0', warum ist Nullkoerzitiv für "undefiniert" nicht "0" – iatboy

+0

"null" und "undefiniert" sind in diesem Fall höchstwahrscheinlich äquivalent, da sie die einzigen beiden Elemente in JS sind, die keine Art von Eigenschaftenzugriff verarbeiten können. '(0) .toString() ===" 0 ", aber' (null) .anything' resultiert in 'TypeError'. –

+0

Eine vollständige Antwort finden Sie unter https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness – stevemao

0

Der Wert null ist ein JavaScript-Literal stellt einen "leeren" Wert oder "undefined". null ist einer der primitiven Werte von JavaScript. Es ist weder gleich boolesch true noch gleich boolean false weil sein Wert nicht definiert ist. Der Wert von null ist eher falsch, obwohl es nicht false ist. Deshalb heißt es "falsey" -Operatoren und ein if (var) { }-Block wird nicht ausgeführt, wenn varnull ist.

+0

'var' sollte nicht als Variablenname verwendet werden, da es sich um ein reserviertes Wort handelt. Beispiel sollte 'someVar' anstelle von' var' heißen. – SherylHohman

+0

Verwechseln Sie nicht "..sein Wert ist nicht definiert" mit dem Wert von "undefiniert". Besser gesagt als "..sein Wert ist unbekannt". – SherylHohman

2

Antwort: Es gibt keinen relativen Aspekt zwischen Null und Boolean.

MDN Quelle: -

Der Wert null ist eine wörtliche (keine Eigenschaft des globalen Objekts wie undefiniert sein kann). In APIs wird Null häufig an der Stelle abgerufen, an der ein Objekt erwartet werden kann, aber kein Objekt relevant ist. Bei der Überprüfung auf null oder undefined Vorsicht vor den Unterschieden zwischen Gleichheit (==) und Identität (===) Operatoren (Typ-Konvertierung wird mit der ehemaligen durchgeführt).

// foo does not exist, it is not defined and has never been initialized: 
> foo 
"ReferenceError: foo is not defined" 

// foo is known to exist now but it has no type or value: 
> var foo = null; foo 
"null" 

Unterschied zwischen null und undefined

typeof null  // object (bug in ECMAScript, should be null) 
typeof undefined // undefined 
null === undefined // false 
null == undefined // true 

Javascirpt|MDN

+3

Sie sollten wahrscheinlich klarstellen, welche Teile dieser Antwort Sie von der Quelle genommen haben und welche Teile Sie selbst geschrieben haben. Http://StackOverflow.com/Help/Referencing – BoltClock

1

Hinzufügen zur aktuellen Diskussion. null> = false gibt true zurück.

Ich glaube, dass es ist, weil dies als interpretiert wird! (Null < false)

Verwandte Themen