在NodeJs
控制台中,使用空对象与true
或false
的非严格比较,我总是得到false
。为什么呢?
> ({}) == true || ({}) == false
false
答案 0 :(得分:4)
因为您正在将对象与布尔值进行比较。因为你没有使用类型安全的比较,事情变得复杂。
Booleans get compared to other types好像它们是数字,即true
首先投放到1
,false
投放到0
。然后,当一个对象与一个数字进行比较时,它将被铸造to a primitive value(没有首选类型) - 调用DefaultValue
algorithm。在普通对象上,这将对它们进行字符串化,以及空对象{}
becomes "[object Object]"
,它既不等于0也不等于1。
然而,有些对象会与布尔值相等,例如:
[0] == false
[1] == true
({toString:function(){return "1"}}) == true
({valueOf:function(){return 0}}) == false
({valueOf:function(){return true}}) == true