Что не так с моими Firefox и Chrome – в обоих браузерах простой тест выдаёт противоречащий здравому смыслу и спецификациям результат:
[ true == null, false == null]
/*
false,false
*/
От перестановки мест результат не меняется. Точно та же картина с undefined
[ undefined == true, undefined == false, undefined == null]
/*
false,false,true
*/
Если создавать объекты типа Boolean, всё становится как положено:
[ new Boolean(null) == true, new Boolean(null) == false]
/*
false,true
*/
Ответ
Потому что The Abstract Equality Comparison Algorithm требует, если Type(x) или Type(y) являются Boolean при сравнении x == y, тогда Boolean должно быть приведено числу с помощью ToNumber, которое конвертирует true в 1 и false в +0
Если по простому, то в JS нету соответствия между bool и null. null в JS это тип. Поэтому сравнивая его с чем-то другим вы всегда получите false
Комментариев нет:
Отправить комментарий