You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中Math.abs运算后与-0全等返回true的疑问及解决方法

区分正0和负0的比较问题

问题代码

console.log(Math.abs(-16) % 2 === 0) // true
console.log(Math.abs(-16) % 2 === -0) // true(不符合预期)

原因说明

JavaScript里的严格相等运算符===不会区分正0(0)和负0(-0)——尽管二者的二进制底层表示不同,但===会将它们判定为相等,所以才会出现上述不符合预期的结果。

解决方案

有两种简单方式可以实现区分正0和负0的比较:

方法1:使用Object.is()

ES6引入的Object.is()方法会严格区分正0和负0,同时也能正确处理NaN的比较(这是===做不到的)。修改后的代码如下:

console.log(Object.is(Math.abs(-16) % 2, -0)) // false(符合预期)

方法2:利用倒数特性区分

正0的倒数是Infinity,负0的倒数是-Infinity,可以通过这个差异来判断:

const result = Math.abs(-16) % 2;
console.log(1 / result === 1 / -0) // false(符合预期)

内容的提问来源于stack exchange,提问作者Jefferson Chukwu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 18:05:04