Страницы

Поиск по вопросам

вторник, 30 октября 2018 г.

Почему true==null и false==null оба дают false?

Что не так с моими 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

Комментариев нет:

Отправить комментарий