Javascript 中的 0 和 -0 之间有区别吗

Fai*_*eef 6 javascript

在 Javascript 中乘法

1 * 0 = 0

然而

-1 * 0 = -0

好吧,我可以从技术上理解它的 0,引擎盖下的 0 和 -0 之间有什么不同吗?

Ara*_*edi 5

有趣的!似乎它们的值是相等的——都不大于另一个,但它们是具有多种副作用的不同对象(包括除以0-0根据 Roisin 的回答)。

观察到的其他有趣的怪癖:

const a = 0;
const b = -0;

a == b; // true
a === b; // true

a < b; // false
b < a; // false

Object.is(a, b); // false
Object.is(a, -b); // true

b.toString(); // "0" <-- loses the negative sign

a + b; // 0
b - a; // -0
a * b; // -0

Run Code Online (Sandbox Code Playgroud)

  • JS 中的 == 和 === 将有符号和无符号 0 视为相同。这是遵循 IEEE-754 模型的许多(大多数?)语言的标准,通常需要不同的方法来检测。 (2认同)

Rya*_*ell 5

是,有一点不同。JavaScript 对零进行了签名,因此两者在内部的表示方式不同。

也存在一些实际差异:

console.log(1 / +0 ===  Infinity) // true
console.log(1 / -0 === -Infinity) // true
Run Code Online (Sandbox Code Playgroud)