检测正零和负零之间的差异

JavaScript - Detecting the difference between positive zero and negative zero

本文关键字:之间 检测      更新时间:2023-09-26

我使用MomentJS来计算两次之间的差异。这个图书馆的奇怪之处在于今天和今天的差是0。今天和明天的差值是-0。

我的问题是,如何区分0和-0。JavaScript对它们的处理似乎是一样的。

例如,如果我写以下代码:

if (tomorrow === -0)
    console.log('It is tomorrow!');
else if (tomorrow === 0)
    console.log('It is today!');

下面是一个关于JSFiddle如何处理返回值的示例(我在澳大利亚,因此根据您在单词中的位置,您可能需要调整今天和明天的日期)

1/val > 0会做你想做的。

返回true为正,false为负。

这可以工作,因为1/-0返回负无穷,1/0返回正无穷,然后它们是可比较的。你也可以像1/val == Infinity .

正如在这个Stack Overflow问题(以及在评论中)指出的那样,在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

JSFiddle

请参阅这篇博客文章,了解更多细节和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;
}