При сравнении null
с true
, оно оценивается как false
, , поэтому оно не равно true
. Аналогично, при использовании в любом другом контексте, где он должен рассматриваться как логическое значение & mdash; как выражение if
или while
& mdash; это false
.
Не совсем правильно говорить, что «null - это объект типа», потому что это не так. Это null
. На самом деле он не имеет какого-либо типа, (Спасибо @Roee Gavirel) У него есть свой собственный тип (нулевой тип), потому что он не является ничем. Другими словами, если переменная имеет значение null
, это означает, что она ни на что не ссылается; нет объектов вообще.
изменить & mdash; дерьмо держись секунду, потому что мой мозг все еще спит.
Хорошо, вот что в спецификации. Если один из операндов ==
является логическим, то логическое значение преобразуется в число (да, действительно), и преобразование продолжается таким образом. Вот почему null
равно ==
ни true
, ни false
. Следовательно, «странность» заключается не столько в null
, сколько в сложных правилах оценки ==
сравнений.
Раздел 11.9.3 стандарта ECMA-262 объясняет все это более или менее понятным образом. Достаточно сказать, что семантика ==
совсем не проста.