JavaScript 风格:不要对原始类型使用包装对象

发布于 2024-11-26 19:07:31 字数 206 浏览 3 评论 0原文

在 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

行雁书 2024-12-03 19:07:31

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

Because every variable that is typeof Object is truthy and wrappers are objects.

吃颗糖壮壮胆 2024-12-03 19:07:31

如果 x 为真,if(x) 将运行。

x 如果不是 false,则为 true。

如果 x 为 nullundefined0""false,则 x 为 false >

因此,由于 new Boolean(false) 是一个 Object 并且 Object 是 true,所以该块运行

if(x) will run if x 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 an Object and an Object is truthy, the block runs

剩余の解释 2024-12-03 19:07:31

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 of false.

So be careful using Boolean objects instead of Boolean values. =)

书间行客 2024-12-03 19:07:31

以下代码使用布尔对象。布尔对象为 false,但 console.log("Found") 仍会执行,因为条件语句中的对象始终被视为 true。对象代表 false 并不重要;它是一个对象,因此它的计算结果为 true。

var found = new Boolean(false);
if (found) 
{    console.log("Found");
       // this executes
}

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.

var found = new Boolean(false);
if (found) 
{    console.log("Found");
       // this executes
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文