为什么 new Boolean(false) 是 true?

4

我不明白正在发生什么。

var x=new Boolean(false)
if(x){
  console.log('plus')
}
console.log(x==false) //true

为什么if(x)返回true呢?

5
请注意 x !== false 的意思是“x 不等于 false”。 - user2357112
7个回答

7
文档中如此说明:

任何值不为undefined或null的对象,包括其值为false的Boolean对象,在传递给条件语句时都会被视为true。例如,以下if语句中的条件将被视为true。

x = new Boolean(false);
if (x) {
  // ...this code is executed
}

直接来自MDN

只有当传递到条件语句时才会执行? - Michael Phelps
嗯,是的,但你还打算用它做什么? - CodingIntrigue
干得好,直接复制MDN并将其发布为答案。你可能想将问题标记为寻找外部资源,然后关闭它。"直接来自MDN"这一行是后来编辑的... - Cerbrus
1
@Cerbrus 谢谢你。我难道没有清楚地说明吗?至于你的编辑,绝对不行。那不是原帖问的问题,但我提供了它作为答案。这意味着其他引用 MDN 文档的答案将被视为无效-这是错误的。总之,我们的评论都不适合这个地方。如果你觉得有需要,请去元社区讨论。 - CodingIntrigue
1
RGraham:再次审视“情况”(译者注:上下文缺失),并且承认,在提出一个快速元问题之后,我理解为什么这样的答案不一定是“坏”事。 - Cerbrus

5

5
这很简单: x 是一个 Boolean 对象。(记录它将显示:Boolean {})
所有对象都会计算为 true(请参见“说明”下的第一段)。

1
所有对象都会被评估为真 - 虽然我知道包含一个链接到一些文档可能是有益的,这样不知道的用户就可以参考一些东西,以便在未来继续学习。给别人喂鱼和教别人如何钓鱼之间的区别 - 或者说什么话,只是我的个人偏好。 - Nope
1
@FrançoisWahl:好的,谢谢。 - Cerbrus

2

var x = new Boolean();

使用关键字new创建的变量是对象类型,对象类型的值始终为true


0

0

你正在错误地使用布尔函数:http://www.w3schools.com/js/js_booleans.asp

你需要的是:

var x = false;
if (Boolean(x)){

}

然而,由于你已经知道 x 是 true 还是 false,并且你不需要评估一个表达式来判断它是 true 还是 false(根据链接),所以你不需要使用函数 Boolean()


0

布尔类不是原始值。当您进行检查时

if (someObject) 

它将返回true,因为

Boolean(someObject)

将始终返回true。

这里有几个选项: 1. 使用

if (valueOf(x))

获取原始值

2. 去掉 'new' 关键字

x = Boolean(false)

所以你得到了布尔函数的值


看一下Javascript中new Boolean()的目的是什么?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接