在Google JavaScript样式指南中,它表示不对原始类型使用包装器对象。它说这样做是“危险的”。为了证明它的观点,它使用了例子:
var x = new Boolean(false);
if (x) {
alert('hi'); // Shows 'hi'.
}
好的,我放弃了。为什么if代码在这里执行?
答案 0 :(得分:17)
因为typeof
Object
的每个变量都是真实的,而包装器是对象。
答案 1 :(得分:11)
if(x)
将在x
真实的情况下运行。
x
如果不是假的话就是真的。
null
,undefined
,0
,""
,false
,则x为false
因为new Boolean(false)
是Object
而Object
是真实的,所以该块会运行
答案 2 :(得分:1)
在if(x)
案例中,它实际上是在评估所指对象的默认布尔值,而不是false
的值。
因此请谨慎使用Boolean
个对象而不是Boolean
值。 =)
答案 3 :(得分:0)
以下代码使用Boolean对象。 Boolean对象为false,但console.log("Found")
仍然执行,因为在条件语句中对象始终被视为true。对象表示错误并不重要;它是一个对象,因此它的结果为真。
var found = new Boolean(false);
if (found)
{ console.log("Found");
// this executes
}