在将两个类型不同的值进行比较时,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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。