2016-12-06 44 views
1

为什么与null,自动类型转换与不同的二元运算符不同?JavaScript,带“null”的自动类型转换

console.log(null * 8) // => 0 * 8 => 0 
console.log(null == 0) // => false 

因此与第二条语句,没有得到类型强制转换为0。

+2

语言是这样定义的。你想解决什么问题? – Pointy

+0

没有一个具体的问题,我试图解决,只是好奇为什么语言这样工作。 – Arshaan

+1

http://stackoverflow.com/questions/13407544/why-null-in-javascript-is-bigger-than-1-less-than-1-but-not-equal-to-0 –

回答

1

这是因为,当你想multiply,两个操作数必须是数字。因此,JS使用ToNumber抽象操作,并且ToNumber(null)为0.

当您compare时,值不需要是数字。比较非数值是有意义的。所以null不会被强制为一个数字。

0

null被强制为+0进行数字操作。但是,==不是数字运算符,因此不会执行任何类型的强制转换,因此将null == 0指定为false