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

时间:2012-01-13 11:00:53

标签: javascript

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

为什么?

1 个答案:

答案 0 :(得分:6)

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

换句话说,false(以及其他虚假值,如0)将强制转换为空字符串。 !=====运算符(严格相等运算符)确保所比较的内容属于同一类型。


为了扩展原因,您需要查看规范(在评论中链接到T.J.Crowder)。 “Abstract Equality Comparison Algorithm”部分告诉我们以下内容:

  

如果Type(x)是布尔值,则返回比较结果ToNumber(x)   == y。

ToNumber部分告诉我们:

  

如果参数为true,则结果为1。结果是+0,如果是   论证是错误的。

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

  

如果Type(x)是Number而Type(y)是String,则返回结果   比较x == ToNumber(y)。

调用ToNumber on an empty string会产生+0,就像false一样:

  

StringNumericLiteral为空或仅包含空格   转换为+0。

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

  

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

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