12

我正在查看http://zero.milosz.ca/上的第一个表,并想了解原因,例如,0 == []0 != {}。我假设这是因为Number([]) == 0Number({}) == NaN。但是,这部分似乎是任意的。为什么空列表0和空对象 a NaN

4

3 回答 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 回答