Javascript:关于比较的混淆" 2 == true"

时间:2013-05-24 07:24:11

标签: javascript comparison

这是一个javascript比较:

2 == true //false

据说,返回false的原因是因为比较将true转换为Number数据类型,结果为1:

console.info(Number(true)) // 1

我的困惑是,为什么比较不会将数字2转换为Boolean数据类型

console.info(Boolean(2)) // true

并且2 == true结果可能是true

2 个答案:

答案 0 :(得分:3)

我在这里找到了文档:

Comparison Operators,其中说:

  

如果两个操作数的类型不同,则JavaScript会转换   操作数然后应用严格的比较。如果任一操作数是一个数字   或者布尔值,如果可能,操作数将转换为数字;其他   如果任一操作数是一个字符串,则另一个操作数转换为a   如果可能的话。如果两个操作数都是对象,那么JavaScript   比较操作数引用时相等的内部引用   内存中的同一个对象。

答案 1 :(得分:0)

==进行隐式转换比较。在这种情况下,2是数字,true是布尔值。转换规则是"在将数字与布尔值进行比较时,布尔值将转换为数字"因此

  

true转换为1

和2 == 1将为false。

//similarly, 
2 == false; //false

因为false将转换为0,而且2也不能等于0.

但是,1 == true。出于同样的原因,true将被转换为1和1 == 1