这是一个javascript比较:
2 == true //false
据说,之所以返回false,是因为比较转换true
为Number
数据类型,结果为1:
console.info(Number(true)) // 1
我的困惑是,为什么比较不将数字转换2
为Boolean
数据类型
console.info(Boolean(2)) // true
结果2 == true
可能是true
?
这是一个javascript比较:
2 == true //false
据说,之所以返回false,是因为比较转换true
为Number
数据类型,结果为1:
console.info(Number(true)) // 1
我的困惑是,为什么比较不将数字转换2
为Boolean
数据类型
console.info(Boolean(2)) // true
结果2 == true
可能是true
?
我在这里找到文档:
比较运算符,其中说:
如果两个操作数的类型不同,JavaScript 会转换操作数,然后应用严格比较。如果任一操作数是数字或布尔值,则尽可能将操作数转换为数字;否则,如果任一操作数是字符串,则尽可能将另一个操作数转换为字符串。如果两个操作数都是对象,那么当操作数引用内存中的同一个对象时,JavaScript 会比较相等的内部引用。
== 进行隐式转换以进行比较。在这种情况下2
是数字并且true
是布尔值。转换规则是“在将数字与布尔值进行比较时,布尔值将被转换为数字”因此
true 转换为 1
和 2 == 1 将是错误的。
//similarly,
2 == false; //false
因为 false 将被转换为 0 并且 2 也不能等于 0。
但是,1 == 真。出于与 true 相同的原因,将转换为 1 和 1==1