Javascript 为什么新布尔值(false)为true?

Javascript 为什么新布尔值(false)为true?,javascript,Javascript,我不明白发生了什么事 var x=new Boolean(false) if(x){ console.log('plus') } console.log(x==false) //true 为什么if(x)返回true?在文档中这样说: 值不是未定义或空的任何对象,包括布尔值 值为false的对象在传递给 条件语句。例如,以下条件中的条件 语句的计算结果为true 直接从。参见MDN文档: 据说: 值不是未定义或空的任何对象,包括布尔值 值为false的对象在传递给 条件语句 就这么简单:

我不明白发生了什么事

var x=new Boolean(false)
if(x){
  console.log('plus')
}
console.log(x==false) //true
为什么
if(x)
返回
true

在文档中这样说:

值不是未定义或空的任何对象,包括布尔值 值为false的对象在传递给 条件语句。例如,以下条件中的条件 语句的计算结果为true

直接从。参见MDN文档:

据说:

值不是未定义或空的任何对象,包括布尔值 值为false的对象在传递给 条件语句


就这么简单:

x
是一个
Boolean
对象。(记录它将显示:
Boolean{}

所有对象的计算结果均为
true
(请参见)

对象为truthy。 看


因此,在不进行隐式类型转换的情况下(与
false
比较时)对其进行求值是正确的。

您使用的布尔函数不正确:

您需要的是:

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

}
但是,由于您已经知道x是真还是假,并且您没有计算表达式以查看它是真还是假(根据链接),因此不需要函数Boolean()

var x=new Boolean()


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

布尔类不是基本值。 当你检查的时候

if (someObject) 
它将返回真值,因为

Boolean(someObject)
将始终返回真值

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

再次获取原语值的步骤

二,。 删除“new”关键字

x = Boolean(false)
这样就得到了布尔函数的值



看看

注意
x!==false
。仅当传递到条件语句时?是的,但您还打算使用它做什么?很好地复制MDN并将其作为答案发布。您可能希望在寻找异地资源时结束投票。“直接来自MDN”一行后来被编辑…@Cerbrus谢谢。我对你说得不够清楚吗?至于你的编辑,绝对不是。这不是OP要求的,但我在它回答问题时提供了它。这意味着其他不引用MDN文档的答案将被视为无效-这是不正确的。不管怎样,这不是我们发表评论的地方。如果你觉得有必要的话,可以去meta。RGraham:再看一遍“情况”(当然,在一个快速的meta问题之后),我理解为什么这样的答案不一定是“坏的”事物。
所有对象的计算结果都是真的
——而我知道最好包含一个链接,以便不知道的用户可以参考他们将来可以继续学习的东西。喂人和教他们如何钓鱼之间的区别——或者俗话说什么:)。只是我个人的preference@FrançoisWahl:好的,谢谢。
if (valueOf(x))
x = Boolean(false)