JavaScript样式:不要将包装器对象用于基本类型

时间:2011-07-29 18:04:28

标签: javascript object coding-style wrapper primitive

在Google JavaScript样式指南中,它表示不对原始类型使用包装器对象。它说这样做是“危险的”。为了证明它的观点,它使用了例子:

var x = new Boolean(false);
if (x) {
  alert('hi');  // Shows 'hi'.
}
好的,我放弃了。为什么if代码在这里执行?

4 个答案:

答案 0 :(得分:17)

因为typeof Object的每个变量都是真实的,而包装器是对象。

答案 1 :(得分:11)

if(x)将在x真实的情况下运行。

x如果不是假的话就是真的。

如果x为nullundefined0""false

,则

x为false

因为new Boolean(false)ObjectObject是真实的,所以该块会运行

答案 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
}