почему все ложные значения в javascript не равны false при проверке на равенство [duplicate]

1

Я проверял равенство всех 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:

  1. почему null == undefined - true в javascript
  2. Почему (true> null) всегда возвращает true в JavaScript?
  3. Что такое Type Coercion в Javascript?
  • 5
    Семантика оператора == не совпадает с правилами вычисления произвольных значений как логических.
  • 0
    Читайте здесь о приведении типов, вы поймете это немного лучше: stackoverflow.com/questions/19915688/…
Показать ещё 7 комментариев
Теги:
boolean

1 ответ

2
Лучший ответ

Оператор == имеет свою собственную семантику. Вы сравниваете поведение, которое не определено одинаковым.

Если вы хотите увидеть, как работает нормальная "правдивая/фальшивая" оценка, вы должны использовать !value или !!value вместо value == false или value == true:

if (!null) console.log("hi");
if (!NaN) console.log("hi");

Ещё вопросы

Сообщество Overcoder
Наверх
Меню