在最近一篇关于it技术的文章中,作者在没有任何解释的情况下写道:在http://wtfjs.com/网站上发表的内容是真实的。
0 === -0 //returns true
我对 === 运算符的理解是,如果操作数指向同一对象,则返回 true。
此外,减号运算符返回操作数负值的引用。根据这个规则,0 和 -0 不应该相同。
那么,为什么 0 === -0 呢?
0 === -0 //returns true
我对 === 运算符的理解是,如果操作数指向同一对象,则返回 true。
此外,减号运算符返回操作数负值的引用。根据这个规则,0 和 -0 不应该相同。
那么,为什么 0 === -0 呢?
===
并不总是指向相同的对象。它适用于对象,但对于值类型,它比较其值。因此,它的工作原理如下:
var x = 0;
var y = 0;
var isTrue = (x === y);
document.write(isTrue); // true
JavaScript使用IEEE浮点标准,其中0和-0是两个不同的数字,然而,ECMAScript标准规定解析器必须将0和-0解释为相同的数字:
§5.2(第12页)
数学运算,例如加法、减法、取负、乘法、除法以及稍后在此条款中定义的数学函数,应始终被理解为在数学实数上计算精确的数学结果,这些结果不包括无穷大和不包括区分正零和负零的负零。本标准中模拟浮点运算的算法包括必要时采取明确的步骤来处理无穷大和符号零并进行舍入。如果将数学运算或函数应用于浮点数,则应理解为应用于该浮点数所表示的精确数学值;这样的浮点数必须是有限的,并且如果它是+0或-0,则相应的数学值简单地为0。
实际上,即使在位级别上,0和-0也不相同。但是,对于+/- 0,实现了一种特殊情况,使它们比较相等。
当应用于原始数字时,===运算符按值进行比较。
1 / 0
和1 / -0
的结果来证明它们的差异。 - Kendall Frey