在将两个类型不同的值进行比较时,Js会自动将其中一个值转换为另一个值的类型,再进行比较

比较数字与字符串

这种情况下,都会将字符串转换为数字,再对两个数字进行比较

99 == "98"
99 == 98
false

但实际并非所有的字符串都能转换为数字:

99 == "xiaoming"
99 == NaN//因为NaN不与任何东西相等
false

比较布尔值与其他类型

这种情况下,都会将布尔值转换为数字,再进行比较,true会转换为1,false会转换为0。有些情况下,为了判断需要做出多次转换:

"1" == true
"1" == 1
1 == 1
true

比较null与undefined

undefined == null
true

这两个值的比较结果为true,看似有点奇怪,但是规则就是这样。可以理解为,它们其实都是表示“没有值”(没有值的变量和没有值的对象),因此认为它们相等。

所以在Js中,在经常做检验的场合中,其实没有必要同时判断null和undefined

例外

上述三种情形已经可以确定所有的请况,只是对于一些边界情况需要额外注意。一个主要注意的是对象的比较,另一个需要注意的是某些特殊的情形

1 == ""
1 == 0//空字符串转为数字的结果是0,可以自己测试一下
false

附录

===运算符

对于===运算符,当且仅当两个值的类型和值都相同时,结果才为true。
使用===运算符时,也不必考虑各种复杂的规则

拼接

在使用+号进行拼接时,Js会先将数字转换为字符串,再进行拼接操作。

1 + “str”
“1str”

但必须注意的是,+号的结合性是从左到右的,所以1 + 2 + “str”的结果为3str,而1 + (2 + "str")的结果是12str

对于boolean类型,将它与字符串相加时,结果为字符串。true + " love"结果为true love。不过在编写代码时,应当避免这种代码,以免给人带来误解

其它算术运算

对于其它算术运算符,如乘法、除法和减法,Js将认为你要执行的是算术运算,而不是字符串运算3 * "4"会自动转换为3 * 4


简_矩_风
5 声望1 粉丝