在最近的一篇文章中http://wtfjs.com/ http://wtfjs.com/。一位作者在没有解释的情况下写了以下内容,这恰好是真实的。
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标准 http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf声明解析器必须将 0 和 -0 解释为相同的:
§5.2(第 12 页)
数学运算(例如加法、减法、求反、乘法、除法)以及本节后面定义的数学函数应始终理解为计算数学实数的精确数学结果,其中不包括无穷大和不包含与正零不同的负零。本标准中模拟浮点运算的算法包括显式
必要时处理无穷大和有符号零并执行舍入的步骤。如果数学运算或函数应用于浮点数,则应理解为应用于该浮点数表示的精确数学值;这样的浮点数必须是有限的,如果是+0或-0则对应的数学值就是0.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)