我正在查看http://zero.milosz.ca/上的第一个表,并希望了解为什么,例如0 == []
和0 != {}
。我假设是因为Number([]) == 0
和Number({}) == NaN
。但是,这部分似乎是武断的。为什么空列表0
和空对象为NaN
?
答案 0 :(得分:16)
使用Number(some_object)
将使用给定对象的字符串表示形式。对于您的示例,字符串表示形式为:
js> ({}).toString();
[object Object]
js> [].toString();
js>
字符串'[object Object]'
无法转换为数字,但空字符串''
可以。
答案 1 :(得分:9)
详细说明一下ThiefMaster的答案,我已经看了一下ECMAScript的specifications:
将字符串转换为数字时,语法用于转换。特别是,StringNumericLiteral ::: [empty]
的数学值定义为0.实际上,任何空格都为0。
答案 2 :(得分:2)
当一个值是一个对象([],{})而另一个是数字或字符串时,operator ==使用内置的转换方法将对象转换为原始值(在本例中为数字) Javascript中的所有对象都继承: toString()和 valueOf()。
对于{}之类的通用对象,使用 valueOf ,默认情况下它返回对象本身,即!= 0。
对于内置数组,使用 toString 。应用于数组的此方法返回包含由逗号连接的所有元素的字符串。对于空数组,它返回一个空字符串''。
然后解释器将 valueOf 应用于该字符串;对于空字符串,此方法的返回值为0,因此[] == 0。