2015-01-23 7 views
2

я наткнулся на что-то вроде этого сегодня (я думал, что это предупредит до свидания)Почему это утверждение if не работает должным образом?

x = new Boolean(false); 

if (x) { 
    alert('hello'); 
}else{ 
    alert('goodbye'); 
} 

Я подумал, что было что-то вроде этого (который оповещает до свидания):.

x = false; 

if (x) { 
    alert('hello'); 
}else{ 
    alert('goodbye'); 
} 

Я дон Я понимаю, как это работает.

+0

Добро пожаловать в JavaScript. – Alternatex

ответ

3

Это пример Boolean function, а не булевский примитив.

true и false в javascript являются boolean primitives. Когда вы используете их с булевыми операторами, они ведут себя так, как вы ожидали. Например, true || false - true и true && false - false.

С другой стороны, Boolean - это специальная функция, которая может преобразовывать другие типы данных в булевы (между прочим). Когда вы вызываете new Boolean(false), вы создаете объект Boolean, который содержит булевский примитив false. Это критическое различие в этом случае.

Короче говоря,

  • if(new Boolean()) использует правила truthy значение в JavaScript. Это объект, который не является нулевым, поэтому он «истинный».
  • if(false) является булевым примитивом и фактически проверяет истинное/ложное.
3

Вы должны искать свойства «правдиво-фальшивые» javascript. Вот article. В первом случае x истинно, потому что это непузырный и не неопределенный объект, следовательно, это правша. Во втором, x - это boolean тип false, который составляет falsy.

Некоторые вещи, чтобы помнить из этой статьи:

следующие значения falsy:

  • ложные
  • 0 (ноль)
  • "" (пустая строка)
  • null
  • неопределенными
  • NaN (специальное числовое значение значение не является числом!)

Все остальное truthy!

3

Если вы используете typeof x, вы понимаете, что x является объектом. Объект всегда прав.

Большинство значений преобразовать верно, за исключением следующих, которые преобразуют в ложь:

  • пустая строка ""
  • нулевой
  • неопределенными
  • номер 0
  • Число NaN
  • Булево ложное
2

new Boolean(false) возвращает объект, который не является нулевым. Непустые объекты всегда true.

reference

Смежные вопросы