ES2020 负零和正零的区别及注意点

在 JavaScript 中,负零和正零虽然都表示的是数值 0,但是它们在计算机存储中有着不同的二进制表示。这就导致在一些特定的场景下,负零和正零的计算结果也会有所不同。本文将详细介绍负零和正零的区别以及注意点,并给出具体的示例代码。

负零和正零的二进制表示

在 JavaScript 中,数值 0 可以用两种方式表示,一种是正零,另一种是负零。它们在计算机存储中的二进制表示如下:

  • 正零:所有位都为 0,符号位为 0。
  • 负零:所有位都为 0,符号位为 1。

需要注意的是,虽然负零和正零在计算机存储中的二进制表示不同,但它们在 JavaScript 的运算中都被视为数值 0。

负零和正零的计算结果

在一些特定场景下,负零和正零的计算结果会有所不同。下面分别介绍这些场景。

除以零

在数值计算中,除以零通常是不允许的,而 JavaScript 中的除法运算也不例外。所以当我们尝试除以数值 0 时,JavaScript 会报错:

需要特别注意的是,正零除以正数或者负数,结果是正零;负零除以正数或者负数,结果是负零。

判断相等

在 JavaScript 中,用 ===== 判断两个数值是否相等时,负零和正零会被认为是相等的。

这是因为 JavaScript 中的相等判断是基于 IEEE 754 规范的比较,而该规范认为负零和正零是相等的。

判断正负

在一些场景下,我们需要判断一个数值是正数、负数、还是零。在这种情况下,负零和正零的差异就变得重要了。

可以使用以下方法来判断一个数值是正数、负数、还是零:

在上面代码中,我们用 1 / num 来判断一个数值是正零还是负零。如果 1 / num 的值为正无穷大,那么 num 就是正零;反之,就是负零。

总结

负零和正零都表示数值 0,但是它们在计算机存储中的二进制表示不同。在一些特定场景下,负零和正零的计算结果也会有所不同。特别需要注意的是,在相等判断和判断正负数值时,负零和正零和正数 0 都被当做相等的处理,因此需要谨慎使用。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/653224c37d4982a6eb465ec3


纠错
反馈