JavaScript 风格:不要对原始类型使用包装对象
在 Google JavaScript 风格指南中,它说不要对原始类型使用包装对象。它说这样做是“危险的”。为了证明它的观点,它使用了这样的例子:
var x = new Boolean(false);
if (x) {
alert('hi'); // Shows 'hi'.
}
好吧,我放弃。为什么if代码会在这里执行?
In the Google JavaScript style guide, it says not to use wrapper objects for primitive types. It says it's "dangerous" to do so. To prove its point, it uses the example:
var x = new Boolean(false);
if (x) {
alert('hi'); // Shows 'hi'.
}
OK, I give up. Why is the if code being executed here?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
因为每个
typeof
Object
的变量都是 true,而包装器是对象。Because every variable that is
typeof
Object
is truthy and wrappers are objects.如果
x
为真,if(x)
将运行。x
如果不是 false,则为 true。如果 x 为
null
、undefined
、0
、""
、false
,则 x 为 false >因此,由于
new Boolean(false)
是一个Object
并且Object
是 true,所以该块运行if(x)
will run ifx
is truthy.x
is truthy if it's not falsey.x is falsey if x is
null
,undefined
,0
,""
,false
So since
new Boolean(false)
is anObject
and anObject
is truthy, the block runs在
if(x)
情况下,它实际上评估的是指定对象的默认布尔值,而不是它的false
值。因此,请谨慎使用
Boolean
对象而不是Boolean
值。 =)In the
if(x)
case, it's actually evaluating the default Boolean of the object named and not its value offalse
.So be careful using
Boolean
objects instead ofBoolean
values. =)以下代码使用布尔对象。布尔对象为 false,但
console.log("Found")
仍会执行,因为条件语句中的对象始终被视为 true。对象代表 false 并不重要;它是一个对象,因此它的计算结果为 true。The following code uses a Boolean object. The Boolean object is false, yet
console.log("Found")
still executes because an object is always considered true inside a conditional statement. It doesn’t matter that the object represents false; it’s an object, so it evaluates to true.