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
.
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. –
Null jest literałem, a false jest wartością logiczną; oba mogą być nieporównywalnymi typami. –
ponieważ JavaScript –