最近发表于http://wtfjs.com/的帖子。一位作者在没有解释的情况下撰写以下内容,这恰好是真实的。
0 === -0 //returns true
我对===运算符的理解是,如果操作数指向同一个对象,则返回true。
此外, - 运算符返回对操作数的负值的引用。使用此规则,0和-0不应相同。
那么,为什么0 === -0?
答案 0 :(得分:6)
===
并不总是意味着指向同一个对象。它在对象上执行,但在值类型上,它会比较值。因此这是如何工作的:
var x = 0;
var y = 0;
var isTrue = (x === y);
document.write(isTrue); // true
JavaScript使用IEEE浮点标准,其中0和-0是两个不同的数字,但是,ECMAScript standard表示解析器必须将0和-0解释为相同:
§5.2(第12页)
数学运算,如加法,减法,否定,乘法,除法,以及本节后面定义的数学函数,应始终理解为计算数学实数的精确数学结果,不包括无穷大和 do不包括与零正值区分的负零。本标准中用于模拟浮点运算的算法包括显式算法 必要时,处理无穷大并签署零并执行舍入的步骤。如果将数学运算或函数应用于浮点数,则应理解为应用于由该浮点数表示的精确数学值;这样的浮点数必须是有限的,如果它是 +0或-0,那么相应的数学值就是0 。
答案 1 :(得分:5)
实际上,即使在位级别,0和-0也不相同。但是,有一个特殊情况为+/- 0实现,因此它们相等。
===运算符在应用于原始数字时按值进行比较。
答案 2 :(得分:3)
原始数字不是对象。您正在对数字进行值比较,而不是对象的身份比较。
正零等于负零。
这来自===
运算符的比较算法
如果Type(x)是Number,那么
如果x为NaN,则返回false。
如果y为NaN,则返回false。
如果x与y的数值相同,则返回true。
如果x为+0且y为-0,则返回true。
如果x为-0且y为+0,则返回true。
返回false。