在 JavaScript 中区分 0 和 -0
虽然 ECMAScript 5.1 规范在数字上区分 0 和 -0,但问题是为什么比较 0 === -0 在 JavaScript 中计算为 true。
IEEE 754 标准和有符号零
JavaScript 利用 IEEE 754 标准进行数字表示,它允许存在两个零:0(正零)和-0(负零)。在 IEEE 754 中,零通常编码为 0,但 0 和 -0 都是有效表示。
严格相等比较算法
ECMA 第 11.9.6 节-262规范定义了严格相等比较算法。对于数值比较,它明确指出在严格相等比较中 0 和 -0 被视为相等:
如果 x 为 0 并且 y 为 −0,则返回 true。
如果 x 为 −0 并且 y 为 0,则返回 true。
因此,虽然 0 和 -0 在数字上可能不同,但出于方便和逻辑原因,它们在严格相等比较中被认为是相等的。
Object.is 比较
ES2015 引入了 Object.is 方法来进行更精确的比较。 Object.is 显式区分 -0 和 0,比较时返回 false:
Object.is(-0, 0); // false
总之,JavaScript 使用 IEEE 754 标准,在严格相等比较中将 0 和 -0 视为相等,以简化编码约定。但是,如果需要,Object.is 方法允许进行更细致的比较。
以上是为什么 JavaScript 在 `===` 比较中将 0 和 -0 视为相等,但在 `Object.is` 中却不然?的详细内容。更多信息请关注PHP中文网其他相关文章!