检测正零和负零之间的差异
JavaScript - Detecting the difference between positive zero and negative zero
我使用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;
}
相关文章:
- 砖块和球之间的碰撞检测(使用数字数组)
- javascript中两个正方形之间的碰撞检测
- 什么's特征检测、特征推断和使用UA字符串之间的区别
- 如何在three.js中检测立方体和球体之间的碰撞
- 如何检测两个点之间的输入中的数字
- Javascript - 检测字符串中的某些字符并替换这些字符之间的内容
- 如何在 javascript 中检测两个图像之间的冲突
- jQuery 检测鼠标是否在 mouseenter 和mouseleave之间单击
- 如何获取我的 x 和 y 值以检测 html5 画布中两个图像之间的冲突
- 使用Javascript检测两个字符串之间的差异
- 如何检测用户所做的更改和程序化更改之间的差异
- 在three.js中检测球体和三角形之间的碰撞
- 在jquery中检测两个图像之间的冲突
- 如何检测项目在可观察阵列之间的移动
- 球之间的碰撞检测javascript
- 如何在桌面和移动Chrome用户代理之间进行检测
- 用javascript检测颜色是否介于两种颜色之间
- ontouchmove:在多个元素之间移动触摸时检测被触摸的新元素
- 如何检测快速移动物体之间的碰撞
- Javascript碰撞检测之间的圆和多边形