我想我知道JavaScript中==和===之间的差异,是= =在比较时会输入强制类型,但===不会。我理解以下代码是真的:
console.log(true == "1");
但是当下面的代码是假的时候?
console.log(true == "true");
答案 0 :(得分:4)
当你粗略地将布尔值与另一种类型的值进行比较时,布尔值被强制转换为数字。
当你比较数字和字符串时,字符串被强制转换为数字。
完整规则在The Abstract Equality Comparison Algorithm
中说明这个过程是这样的:
true == "true" ─┐
├─ Number(true) // 1
1 == "true" ─┤
├─ Number("true") // NaN
1 == NaN ─┤
├─ // Comparing with `NaN` always produces `false`
false ─┘
答案 1 :(得分:1)
布尔操作数转换为数值,字符串转换为数值,因为一个操作数是数字。
我们最终得到1 == NaN。如果其中一个操作数是NaN,则等于运算符总是返回false。