Я проверял равенство всех falsey значений из списка здесь:
Ниже кода для трех значений false, а именно null
, undefined
и NaN
не печатает hi
:
if(null == false) console.log('hi');
if(undefined == false) console.log('hi');
if(NaN == false) console.log('hi');
Все остальные значения false в конечном итоге распечатывают текст hi
как показано ниже:
if('' == false) console.log('hi');
if(0x0 == false) console.log('hi');
if(false == false) console.log('hi');
if(0.0 == false) console.log('hi');
if(0 == false) console.log('hi');
Может ли кто-нибудь помочь мне понять причину такого поведения?
Обновление для будущих читателей:
Три интересных чтения, если вы пытаетесь обернуть голову вокруг странности значений фальши и операторов равенства в JavaScript:
Оператор ==
имеет свою собственную семантику. Вы сравниваете поведение, которое не определено одинаковым.
Если вы хотите увидеть, как работает нормальная "правдивая/фальшивая" оценка, вы должны использовать !value
или !!value
вместо value == false
или value == true
:
if (!null) console.log("hi");
if (!NaN) console.log("hi");
==
не совпадает с правилами вычисления произвольных значений как логических.