区分+0和-0

Ran*_*lue 36 javascript

事实证明,+0 === -0计算结果为true,尽管+0和-0是不同的实体.那么,你如何区分+0从-0?

有一个黑客:

if (1 / myZero > 0) {
   // myZero is +0
} else {
   // myZero is -0
}
Run Code Online (Sandbox Code Playgroud)

我可以做得更好吗?

Ran*_*lue 23

在ECMAScript 6中,Object.is行为类似于===它区分正负零,并Object.is(NaN, NaN)评估为true.(请参阅此处以获取文章.)

Chrome 24支持Object.is.


pim*_*vdb 14

这仍然是某种黑客,但看看规格表明:

Math.atan2(0, -0) === Math.PI // true
Math.atan2(0,  0) === 0       // true
Run Code Online (Sandbox Code Playgroud)


Mat*_*ick 9

根据David Flanagan的书,p.34,将1除以零将产生相应的无穷大,然后可以在等式检查中使用:

1 / 0
> Infinity
1 / -0
> -Infinity
Run Code Online (Sandbox Code Playgroud)

这是无穷大的平等比较的行为:

Infinity === -Infinity
> false
Infinity === Infinity
> true
-Infinity === Infinity
> false
-Infinity === -Infinity
> true
Run Code Online (Sandbox Code Playgroud)