最近查阅了一些资料,看到关于js中+0与-0的判断,做了一下整理并写了一下自己的思路和理解:
function isPositiveZero (num) {
//判断数字是否为0
if (num !== 0) {
return false;
}
//做以下计算,当为+0时,flag的值应为+Infinity,-0时则为-Infinity
let flag = 1/num;
//将flag与0进行比较
return flag > 0;
}
然后,再将上面的函数进行简化,得到如下:
//判断一个数字是否为+0
function isPositiveZero (num) {
return num === 0 && (1/num > 0);
}
另外,也可以使用 Object.defineProperty() 方法来进行判断
我们来看下这个方法的文档:默认情况下,使用Object.defineProperty()
添加的属性值是不可变的。
因此,我们可以通过以下的方法来判断:
//判断一个数字是否为-0
function isNagativeZero(num) {
//判断数字是否为0
if (num !== 0) {
return false;
}
let obj = {};
//通过Object.defineProperty()方法添加默认值,该值默认情况下无法改变
Object.defineProperty(obj, 'num', { value: -0 });
//尝试改变该值,当传入参数与默认值-0相同时,不会报错,会走到最后return true
try {
Object.defineProperty(obj, 'num', { value: num });
} catch (e) {
//当传入的为+0时,因为无法改变该属性,就会抛出错误,return false
return false;
}
return true;
}