结果证明+0 === -0
评估为true
尽管+0
和-0
是不同的实体。那么,你如何区分+0
从-0
?
有一个黑客:
if (1 / myZero > 0) {
// myZero is +0
} else {
// myZero is -0
}
我能做得更好吗?
结果证明+0 === -0
评估为true
尽管+0
和-0
是不同的实体。那么,你如何区分+0
从-0
?
有一个黑客:
if (1 / myZero > 0) {
// myZero is +0
} else {
// myZero is -0
}
我能做得更好吗?
ECMAScript中6种Object.is
行为类似===
,除了它区分阳性和阴性零,并Object.is(NaN, NaN)
计算结果为true
。(请参阅此处的文章。)
Chrome 24 支持Object.is
.
这仍然是某种黑客行为,但查看规范表明:
Math.atan2(0, -0) === Math.PI // true
Math.atan2(0, 0) === 0 // true
根据大卫弗拉纳根的书,p。34,将 1 除以零将产生相应的无穷大,然后可以在等式检查中使用它:
1 / 0
> Infinity
1 / -0
> -Infinity
这是无穷大的相等比较的行为:
Infinity === -Infinity
> false
Infinity === Infinity
> true
-Infinity === Infinity
> false
-Infinity === -Infinity
> true
这将返回 +0:
-0 + 0
这无助于区分 -0 和 +0,但这有助于确保某些值不是 -0。
1 / -0 => -Infinity
1 / (-0 + 0) => Infinity
要检查负零,这里有一个简单的解决方案。
function isNegativeZero(n) {
n = Number( n );
return (n === 0) && (1 / n === -Infinity);
}