在JavaScript中,使用“!= ''”与空字符串进行比较有什么问题?

9 浏览
0 Comments

在JavaScript中,使用“!= ''”与空字符串进行比较有什么问题?

jsbin开始警告我x != \'\' 不好,应该使用x !== \'\' 替换它。

为什么?

admin 更改状态以发布 2023年5月23日
0
0 Comments

var x = false;
console.log(x !== ''); //true
console.log(x != ''); //false

换句话说,false(和其他假值,如 0)将被强制转换为空字符串。 !===== 运算符(严格相等运算符)确保被比较的东西是相同类型的。


为了进一步解释为什么会这样,您需要查阅规范(在 T.J. Crowder 的评论中链接)。关于 “抽象相等比较算法” 的部分告诉我们以下内容:

If Type(x) is Boolean, return the result of the comparison ToNumber(x)
== y.

关于 ToNumber 部分告诉我们:

如果参数是 true,则结果为 1。如果参数是 false,则结果为 +0。

在上面的示例中,参数为 false,因此我们现在在比较 +0!= ''。当比较数字和字符串时,遵循以下规则:

If Type(x) is Number and Type(y) is String, return the result of the
comparison x == ToNumber(y).

在空字符串上调用ToNumber 的结果为 +0,就像对于 false 一样:

一个空的或只包含空格的 StringNumericLiteral 会被转换为 +0。

现在,我们正在比较 +0!= +0,因此我们进入了 "x 和 y 是相同类型" 部分,这告诉我们:

如果 x 是与 y 相同的 Number 值,则返回 true。

因此,+0 等于 +0,由于我们正在使用 !=,因此返回 false

0