我使用MomentJS来计算两次之间的差异。奇怪的是这个库是今天和今天的区别是0.今天和明天的区别是-0。
我的问题是,如何区分0和-0。似乎JavaScript对待它们是相同的。
例如,如果我编写以下代码:
if (tomorrow === -0)
console.log('It is tomorrow!');
else if (tomorrow === 0)
console.log('It is today!');
以下是JSFiddle关于如何处理返回值的示例(我在澳大利亚,因此取决于您可能需要调整今天和明天日期的位置)< / p>
答案 0 :(得分:47)
1/val > 0
会做你想要的。正数为true
,负数为false
。
这是有效的,因为1/-0
返回负无穷大,1/0
返回正无穷大,然后可比较。您也可以执行1/val == Infinity
。
答案 1 :(得分:11)
正如this Stack Overflow question(以及评论中)所指出的那样,JavaScript +0 === -0
确实按设计评估为true
。
您可以使用Infinity
/ -Infinity
查看差异(从技术上讲,+0
/ -0
可能不是产生无限值的唯一数字,所以我离开了额外办理登机手续):
var positiveZero = +0;
var negativeZero = -0;
console.log(positiveZero === 0 && 1/positiveZero === Infinity); // true
console.log(positiveZero === 0 && 1/positiveZero === -Infinity); // false
console.log(negativeZero === 0 && 1/negativeZero === Infinity); // false
console.log(negativeZero === 0 && 1/negativeZero === -Infinity); // true
另请参阅this blog post以获取更多详细信息,另请参阅ECMAScript 5的另一种解决方案:
function isNegative0(x) {
if (x!==0) return false;
var obj=Object.freeze({z:-0});
try {
Object.defineProperty(obj,'z',{value:x});
} catch (e) {return false};
return true;
}