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)