在JavaScript中输入强制

时间:2015-10-27 16:39:32

标签: javascript

我想我知道JavaScript中==和===之间的差异,是= =在比较时会输入强制类型,但===不会。我理解以下代码是真的:

console.log(true == "1");

但是当下面的代码是假的时候?

console.log(true == "true");

2 个答案:

答案 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。