3

这是一个javascript比较:

2 == true //false

据说,之所以返回false,是因为比较转换trueNumber数据类型,结果为1:

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

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

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

结果2 == true可能是true

4

2 回答 2

4

我在这里找到文档:

比较运算符,其中说:

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

于 2013-05-27T06:35:50.760 回答
0

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

true 转换为 1

和 2 == 1 将是错误的。

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

因为 false 将被转换为 0 并且 2 也不能等于 0。

但是,1 == 真。出于与 true 相同的原因,将转换为 1 和 1==1

于 2014-06-21T16:46:24.687 回答