我在 Jest 中编写一些 JavaScript 测试只是为了练习。我编写了以下函数:
const divide = (a, b) => {
if (isNaN(a) || isNaN(b)) {
throw new Error("This function expect 2 numbers");
}
return a / b;
};
然后我编写了以下测试:
describe("Test divide operator", () => {
it("Check the divide function", () => {
expect(divide(10, 0)).toBe(Infinity);
expect(divide(0, 0)).toBe(NaN);
expect(divide(Infinity, Infinity)).toBe(NaN);
expect(divide(10, Infinity)).toBe(0);
expect(divide(10, -Infinity)).toBe(0); // THIS TEST FAILS
});
});
我收到以下错误:
expect(received).toBe(expected) // Object.is equality
Expected: 0
Received: -0
这是一个 JavaScript 错误吗?有人知道为什么 JavaScript 中 0 可以是负数吗? 在我看来,为了通过测试而必须写“-0”有点尴尬。
谢谢。
最佳答案
这不是一个错误,而是 IEEE-754 关于浮点运算的“功能”。 -0
是一个有符号的 0,javascript 正确地实现了它。
实际遇到的情况极其罕见,而且也存在争议。其他语言的处理方式有所不同。
还有-0 === 0 AND -0 === +0
,所以通常并不重要。
关于javascript - 为什么在 JavaScript 中任何数字除以 -Infinity 时都会得到 -0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73226382/