负零是假值吗?

Is minus zero a falsy value?

我还没有在 Javascript 中找到任何关于虚假值的讨论或文章,其中提到负零,而我看到 !!-0 产生 false。这是为什么?

更新: 我现在认为大多数总结虚假值的作者要么不知道 -0 是一个值,要么不知道 0 +0-0.

原因如下: 这里的-0是先计算出来的。它不会只计算负号本身,因此它包括数字。然后输出 0 然后是运行通过!运算符两次。第一个 ! 运算符将 0 转换或解析为布尔值,然后反转或伪造布尔值。 !0 returns true 第二个再次反转它,返回 false

这是个很好的问题。 Javascript 确实区分 -0.0 和 0.0。 (IEEE754 也是如此。) 我们可以通过以下方式进行测试:

var X = -0.0; X
-> "-0"

所以它是一个不同于 0.0 的值。

`!-0.0` -> true

所以你是对的,虚假值列表也应该明确列出 -0.0。

可能他们没有列出它是因为:

0.0 === -0.0   -> true

然而,如果我们认为 javascript 在某些关系中不一致(例如非传递),这不是一个好的理由。

简单地说,the ECMAScript specification表示-0的布尔转换结果为false。这在抽象操作 ToBoolean 的 table 转换中说明,第 7.1.2 节。

If argument is +0, -0, or NaN, return false; otherwise return true.