【发布时间】:2022-01-23 18:06:43
【问题描述】:
我知道 (-0 === 0) 是真的。我很想知道为什么会发生 -0
当我在 stackoverflow 执行上下文中运行此代码时,它返回 0。
const arr = [+0, 0, -0];
console.log(Math.min(...arr));
但是当我在浏览器控制台中运行相同的代码时,它返回-0。这是为什么?我试图在谷歌上搜索它,但没有找到任何有用的东西。这个问题可能不会对某个实际示例增加价值,我想了解 JS 是如何计算它的。
const arr = [+0, 0, -0];
console.log(Math.min(...arr)); // -0
【问题讨论】:
-
有趣,可以在 Chrome 上重现。同样
Math.min(0, -0)和Math.min(-0, 0)都返回-0,所以Math.min确实区分了这些 -
“当我在 stackoverflow 执行上下文中运行此代码时,它返回 0。” - 如果您同时检查浏览器控制台,您将看到 @987654330 @。 Stackverflows 在这些 sn-ps 中的“自己的”控制台的行为与真正的控制台有些不同。如果你也记录
arr,那么在 SO 控制台中会给出[0, 0, 0],在本机浏览器控制台中会给出[0, 0, -0]。 -
还有其他例外,
Object.is(-0, +0);->false和1/0 === Infinity->true而1/-0 === -Infinity->true。 -
@Pointy 答案也可能在“IEEE 754 2019, §5.10”中,它定义了比较操作和 totalOrder ......不幸的是,这个规范在付费墙后面
-
@JonasWilms Here you go。第 69 页,第 9.6 节,“-0 比较小于 +0”。
标签: javascript math floating-point min negative-zero