Стиль JavaScript: не используйте объекты-оболочки для примитивных типов - PullRequest
12 голосов
/ 29 июля 2011

В руководстве по стилю Google JavaScript говорится, что не следует использовать объекты-оболочки для примитивных типов. Он говорит, что это «опасно». Чтобы доказать свою точку зрения, он использует пример:

var x = new Boolean(false);
if (x) {
  alert('hi');  // Shows 'hi'.
}

Хорошо, я сдаюсь. Почему здесь выполняется код if?

Ответы [ 4 ]

17 голосов
/ 29 июля 2011

Поскольку каждая переменная typeof Object является правдивой, а обертки являются объектами.

11 голосов
/ 29 июля 2011

if(x) будет работать, если x верно.

x правда, если не ложь.

х - фальси, если х - null, undefined, 0, "", false

Таким образом, поскольку new Boolean(false) является Object, а Object является правдивым, блок выполняется

1 голос
/ 27 апреля 2014

В случае if(x) он фактически оценивает логическое значение по умолчанию для названного объекта, а не его значение false.

Поэтому будьте осторожны, используя Boolean объекты вместо Boolean значений. =)

0 голосов
/ 07 декабря 2015

Следующий код использует логический объект. Логический объект имеет значение false, но console.log("Found") по-прежнему выполняется, поскольку объект всегда считается истинным внутри условного оператора. Неважно, что объект представляет ложь; это объект, поэтому он оценивается как true.

var found = new Boolean(false);
if (found) 
{    console.log("Found");
       // this executes
}
...