Ben*_*air 24 javascript momentjs
我正在使用MomentJS来计算两次之间的差异.奇怪的是这个库是今天和今天的区别是0.今天和明天的区别是-0.
我的问题是,我如何区分0和-0.似乎JavaScript对待它们是一样的.
例如,如果我编写以下代码:
if (tomorrow === -0)
console.log('It is tomorrow!');
else if (tomorrow === 0)
console.log('It is today!');
Run Code Online (Sandbox Code Playgroud)
这是关于JSFiddle如何处理返回值的一个例子(我在澳大利亚,所以取决于你可能需要调整今天和明天的日期)
She*_*acu 48
1/val > 0会做你想做的.true正面和false负面的回报.
这是有效的,因为1/-0返回负无穷大,并1/0返回正无穷大,然后可比较.你也可以这样做1/val == Infinity.
Mar*_*vin 10
正如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
Run Code Online (Sandbox Code Playgroud)
另请参阅此博客文章以获取更多详细信息以及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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3681 次 |
| 最近记录: |