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