为什么空的javascript对象既不是真也不是假?

时间:2014-09-24 10:48:35

标签: javascript

NodeJs控制台中,使用空对象与truefalse的非严格比较,我总是得到false。为什么呢?

> ({}) == true || ({}) == false
false

1 个答案:

答案 0 :(得分:4)

因为您正在将对象与布尔值进行比较。因为你没有使用类型安全的比较,事情变得复杂。

Booleans get compared to other types好像它们是数字,即true首先投放到1false投放到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