有什么问题!=”在javascript中(与空字符串比较)?

What's wrong with != '' in javascript (comparing to an empty string)?

jsbin开始警告我EDOCX1[0]不好,我应该换成EDOCX1[1]

为什么?


1
2
3
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的章节告诉我们:

The result is 1 if the argument is true. The result is +0 if the
argument is false.

在上面的例子中,参数是false,所以我们现在比较+0 != ''。将数字与字符串进行比较时,遵循以下规则:

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

在空字符串上调用ToNumber会导致+0,就像对false的调用一样:

A StringNumericLiteral that is empty or contains only white space is
converted to +0.

现在我们比较+0 != +0,所以我们进入"x和y属于同一类型"部分,它告诉我们:

If x is the same Number value as y, return true.

所以+0等于+0,因为我们使用!=,所以返回false