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

为什么在JavaScript中用任意数除以-Infinity会得到-0?

JavaScript里的负零(-0):不是Bug,是标准设计

这不是JavaScript的Bug,负零的存在是因为JS遵循IEEE 754浮点数标准——这个工业通用标准里定义了带符号的零,专门用来保留计算过程中的符号信息。

为什么需要负零?

举两个实际场景就能明白:

  • 处理物理运动数据时,比如规定向右为正方向,一个物体速度趋近于零但向左运动,用-0就能准确表示“趋近于零的负方向”,普通的0没法体现这个方向属性。
  • 从数学运算逻辑来看,正数除以负无穷大,结果逻辑上是“趋近于0的负数”,返回-0是符合运算逻辑的,这能保留运算中的符号传递。

解决Jest测试的别扭问题

你的测试失败是因为Jest的toBe方法使用Object.is做严格比较,而Object.is(0, -0)会返回false——它会严格区分正负零。

不想写expect(...).toBe(-0)的话,有两个简单办法:

  • 换成toEqual方法:toEqual对基本类型的判断和===一致,而0 === -0的结果是true,所以修改后测试就能通过:
    expect(divide(10, -Infinity)).toEqual(0);
    
  • 或者给结果加+运算符:+会把-0转换成0,这样用toBe也能通过测试:
    expect(+divide(10, -Infinity)).toBe(0);
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 04:48:16