通过ECMAScript 5.1 specification+0-0进行区分。

为什么+0 === -0评估为true

最佳答案

JavaScript使用IEEE 754 standard表示数字。从Wikipedia


  有符号的零为零,具有相关的符号。在普通算术中,−0 = +0 =0。但是,在计算中,某些数字表示形式允许存在两个零,通常用-0(负零)和+0(正零)表示。这在某些带符号的整数表示形式以及大多数浮点数表示形式中都会发生。数字0通常被编码为+0,但是可以用+0或-0表示。
  
  用于浮点算术的IEEE 754标准(当前由支持浮点数的大多数计算机和编程语言所使用)都需要+0和-0。零可被视为扩展实数线的变体,因此1 / −0 =-∞和1 / + 0 = +∞,仅对于±0 /±0和±∞/±∞未定义以零除。


本文包含有关不同表示形式的更多信息。

因此,这就是为什么必须从技术上区分两个零的原因。


  但是,+0 === -0评估为true。这是为什么 (...) ?


严格平等比较算法section 11.9.6中明确定义了此行为(部分强调我的行为):


  比较x === y(其中xy是值)产生true或false。这样的比较执行如下:
  
  (...)
  
  
  如果Type(x)是Number,则
  
  
  如果x为NaN,则返回false。
  如果y为NaN,则返回false。
  如果x与y相同,则返回true。
  如果x为+ 0,y为−0,则返回true。
  如果x为−0,y为+0,则返回true。
  返回false。
  
  
  
  (...)


+0 == -0 btw也是如此。)

在逻辑上将+0-0视为相等。否则,我们将不得不在我们的代码中考虑到这一点,而我个人不想这样做;)



注意:

ES2015引入了一种新的比较方法Object.isObject.is明确区分-0+0

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

关于javascript - +0和-0是否相同?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48542854/

10-12 03:19