上面一段中,把 ' '当做true 来处理了,下面确是 ' ' == false ,这是为什么呢?(单引号之间有个空格)
' ' && 'c'
对于&&
操作,左边的操作数会转为布尔型。对于字符串来说,在转为布尔型时,除了空字符串作为false
处理,其他的都作为true
。所以' '
被转为true
,结果为右操作数'c'
。' ' == false
对于==
操作,两个操作数会被转为数字型。对于' '
,转为数字型时就是0;而false
转为数字型时也是0。所以两边相同,结果为true
。
== 引起的转型
规则是:
如果有一个操作数是NaN,马上返回false。
如果有一个操作数是boolean值,则在比较相等性之前,先转成数值,false转0,true转1。
如果一个操作数是字符串,另一个操作数是数值,在比较相等性之前先将字符串转为数值。
如果一个操作数是对象,另一个操作数不是,则调用对象的valueOf方法,用得到的基本类型值按照前面 的规则进行比较。
null == undefined --> true
如果两个操作数是对象,则比较它们是不是同一个对象,如果两个操作数都指向同一个对象,则相等 操作符返回true,否则,返回false
按照上面的规则2,可知,false --> 0。
所以问题转成 ' ' == 0。
然后根据规则3。' '会转成数字0,
0 == 0 当然返回true了。。
请看我写的关于转型的文章。链接描述