Ответ 1
Поскольку каждая переменная typeof
Object
является правдой, а обертки - это объекты.
В руководстве по стилю JavaScript в Google говорится, что он не использует объекты-оболочки для примитивных типов. В нем говорится, что это "опасно" для этого. Чтобы доказать свою точку зрения, он использует пример:
var x = new Boolean(false);
if (x) {
alert('hi'); // Shows 'hi'.
}
Хорошо, я сдаюсь. Почему здесь выполняется код if?
Поскольку каждая переменная typeof
Object
является правдой, а обертки - это объекты.
if(x)
будет выполняться, если x
является правдивым.
x
правдиво, если оно не ложно.
x false, если x является null
, undefined
, 0
, ""
, false
Так как new Boolean(false)
является Object
, а Object
является правдивым, блок выполняет
В случае if(x)
он фактически оценивает значение по умолчанию для Boolean объекта, а не его значение false
.
Поэтому будьте осторожны с использованием объектов Boolean
вместо значений Boolean
. =)
В следующем коде используется логический объект. Объект Boolean является false, но console.log("Found")
все еще выполняется, потому что объект всегда считается истинным внутри условного оператора. Не имеет значения, что объект представляет false; его объект, поэтому он принимает значение true.
var found = new Boolean(false);
if (found)
{ console.log("Found");
// this executes
}