首页 >web前端 >js教程 >为什么 JavaScript 中 ` 0 === -0` 计算结果为 True,而 `Object.is(-0, 0)` 返回 False?

为什么 JavaScript 中 ` 0 === -0` 计算结果为 True,而 `Object.is(-0, 0)` 返回 False?

Linda Hamilton
Linda Hamilton原创
2024-11-22 07:04:11517浏览

Why Does ` 0 === -0` Evaluate to True in JavaScript, While `Object.is(-0,  0)` Returns False?

0 和 -0 的区别和相等

ECMAScript 5.1 规范区分 0 和 -0,提出了为什么 0 的问题=== -0 计算结果为 true。

IEEE 754标准

JavaScript 采用 IEEE 754 标准来表示数字。根据 IEEE 754,有符号零允许正零 (0) 和负零 (-0)。浮点运算需要这种区别,因为 1/-0 = -∞ 和 1/ 0 = ∞。

严格相等比较算法

尽管有技术上的限制区别,规范的第 11.9.6 节明确定义了 0 和 的严格相等比较算法的行为-0:

  • 如果 x 为 0,y 为 -0,则返回 true。
  • 如果 x 为 -0,y 为 0,则返回 true。

逻辑和实践原理

从逻辑上讲,它将 0 和 -0 视为相等是有意义的。区分它们会使代码变得复杂,尤其是在使用零时。

Object.is 比较方法

ES2015 引入了 Object.is 来进行更精确的比较。 Object.is 明确区分 0 和 -0:

Object.is(-0, +0); // false

以上是为什么 JavaScript 中 ` 0 === -0` 计算结果为 True,而 `Object.is(-0, 0)` 返回 False?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn