我正在查看http://zero.milosz.ca/上的第一个表,并想了解原因,例如,0 == []
和0 != {}
。我假设这是因为Number([]) == 0
和Number({}) == NaN
。但是,这部分似乎是任意的。为什么空列表0
和空对象 a NaN
?
问问题
328 次
3 回答
16
UsingNumber(some_object)
将使用给定对象的字符串表示。对于您的示例,字符串表示形式为:
js> ({}).toString();
[object Object]
js> [].toString();
js>
字符串'[object Object]'
不能转换为数字,但空字符串''
可以。
于 2012-06-21T18:43:45.497 回答
9
为了详细说明 ThiefMaster 的回答,我查看了 ECMAScript 的规范:
将字符串转换为数字时,使用语法进行转换。特别是, 的数学值StringNumericLiteral ::: [empty]
被定义为 0。事实上,对于任何空白,它都是 0。
于 2012-06-21T18:50:20.993 回答
2
当一个值是对象 ([],{}) 而另一个是数字或字符串时,运算符 == 使用所有对象所在的内置转换方法将对象转换为原始值(在这种情况下为数字) Javascript 继承:toString()和valueOf()。
对于像 {} 这样的通用对象,使用valueOf,默认情况下它返回对象本身,即 != 0。
对于内置数组,使用toString。应用于数组的此方法返回一个字符串,其中包含用逗号连接的所有元素。对于空数组,它返回一个空字符串,''。
然后解释器将valueOf应用于该字符串;该方法对空字符串的返回值为 0,因此 [] == 0。
于 2012-06-28T09:12:56.960 回答