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

rip*_*234 1 javascript

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

为什么?

Jam*_*ice 6

var x = false;
console.log(x !== ''); //true
console.log(x != ''); //false
Run Code Online (Sandbox Code Playgroud)

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


为了扩展原因,您需要查看规范(在评论中链接到TJ Crowder)." 抽象平等比较算法 "一节告诉我们以下内容:

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

该部分ToNumber告诉我们:

如果参数为真,则结果为1.如果参数为false,则结果为+0.

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

如果Type(x)为Number且Type(y)为String,则返回比较结果x == ToNumber(y).

调用ToNumber一个空字符串会产生+0,就像它为false:

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

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

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

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