jsbin开始警告我x != ''
不好,我应该用x !== ''
替换它
为什么?
答案 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
。