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.
| 归档时间: |
|
| 查看次数: |
1650 次 |
| 最近记录: |