Стиль JavaScript: не используйте объекты-оболочки для примитивных типов

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

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

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

Ответ 1

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

Ответ 2

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

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

x false, если x является null, undefined, 0, "", false

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

Ответ 3

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

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

Ответ 4

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

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