2014-12-24 16 views
22

Wiem, że null jest obiektem bez atrybutów i funkcji.Dlaczego (null == false) i (null == true) oba zwracają fałsz?

Jestem jednak mylić dlatego console.log(null == false); i console.log(null == true); zarówno return false.

Jakie są zasady konwersji między null a boolean?

+5

Obaj równa false, ponieważ zerowy nie równa prawdziwe lub fałszywe. Podobnie jak "1" nie oznacza "pizzy" ani "{}". Gdy jest używany samodzielnie w podobnych instrukcjach if, to jest przekształcany na wartość logiczną false, ponieważ jest to wartość falsey. –

+0

Null jest literałem, a false jest wartością logiczną; oba mogą być nieporównywalnymi typami. –

+4

ponieważ JavaScript –

Odpowiedz

32

To dlatego Abstract Equality Comparison Algorithm wymaga, jeśli Type(x) lub Type(y) jest logiczną w ekspresji x == y to wartość logiczna powinna przymusił do numeru poprzez ToNumber, który konwertuje true do 1 i false do +0.

Oznacza to, że każde porównanie true == something lub something == true powoduje 1 == something lub something == 1 (zamiast true i 1 z false i +0 do false).

The Null type nie jest porównywany z 1 lub +0 (w rzeczywistości wartość zerowa jest tylko porównywalna z undefined w AECA).

Istnieje szczegółowa dyskusja na temat wszystkich rodzajów równości w JavaScript na MDN, na którą warto zwrócić uwagę, jeśli chcesz dowiedzieć się więcej.

Jeśli jednak zmusić null do numeru jest coerced to +0 tak +null == false faktycznie zwraca true.

+0

Dziękuję bardzo, mam inne zamieszanie, Wiem, że 'isNaN (null)' równa 'false' i' Number (null) 'równa' 0', dlaczego jest null coeur do 'undefined' nie '0' – iatboy

+0

' null' i 'undefined' są równoważne w tym przypadku najprawdopodobniej dlatego, że są jedynymi elementami JS, które nie mogą obsługiwać żadnego dostępu do właściwości. '(0) .toString() ===" 0 ", ale' (null) .anything' powoduje "TypeError". –

+0

Aby uzyskać pełną odpowiedź, zobacz https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness – stevemao

0

Wartość null jest literałem JavaScript reprezentującym "pustą" wartość lub "niezdefiniowaną". null jest jedną z prymitywnych wartości JavaScript. Nie jest ani równa boolean true ani równa boolean false, ponieważ jego wartość jest niezdefiniowana. Wartość null jest bardziej skłonna do fałszu, mimo że nie jest to false. Dlatego nazywa się to operatorami "falsey", a blok if (var) { } nie zostaje wykonany, gdy var jest null.

+0

'var' nie powinien być używany jako nazwa zmiennej, ponieważ jest to słowo zarezerwowane. przykład powinien powiedzieć 'someVar' zamiast' var'. – SherylHohman

+0

Nie mylić "... wartość jest niezdefiniowana" z wartością "niezdefiniowana". Lepiej powiedzieć, że "... wartość jest nieznana". – SherylHohman

2

Odpowiedź: Nie ma względnego aspektu między wartościami null i boolean.

MDN Źródło: -

Wartość null jest dosłowne (nie jest własnością obiektu globalnego jak nieokreślonej może być). W interfejsach API null jest często pobierany w miejscu, gdzie można oczekiwać obiektu , ale żaden obiekt nie jest istotny. Podczas sprawdzania, czy nie ma wartości Null lub Undefined, należy uważać na różnice między operatorami tożsamości (==) i (===) (konwersja typu jest przeprowadzana z poprzednią wersją ).

// 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" 

Różnica pomiędzy zerową niezdefiniowanych

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

Javascirpt|MDN

+3

Powinieneś prawdopodobnie wyjaśnić, które części tej odpowiedzi wziąłeś ze źródła i które części sam napisałeś. Zobacz http://stackoverflow.com/help/referencing – BoltClock

1

Dodawanie do aktualnej dyskusji. null> = false zwraca true.

wierzę, że to dlatego, że jest to interpretowane jako! (Null < false)