a == !a 为什么

首先说问题,什么情况下 a== !a 结果是 true? 其中一个答案是在 a=[] 的时候,那么问题来了,为什么。

因为在出现 == 和 !的时候,先执行的是取反,

typeof [] == 'object' // return true

 得到结果为![] = false

表达式可以等价转换为

[] == false,这个时候,根据《avaScript权威指南》中的说明,当==两边有一个的 type 为 Boolean 时候,进行转换.

typeof false == boolean // return true
typeof true == boolean // return true
Number(false) == 0 // return true
Number(true) == 1 // return true

 此时可以等价于 [] == 0,

然后根据《avaScript权威指南》中的说明 当 == 两端,有一个类型是 object,另一个是 Number 或者 String 的时候,将 object 转换成 Primitive 类型,这个默认是转换成 String 类型,那么 [].toString() == '' // return true , 这时候表达式就等价于 '' == 0, 接下来还是根据那本书说的额,如果两边是 String == Number 类型的,就将 String 转换成 Number,即 Number(''),。最后,Number('') == 0 return true,一步一步返回去得到结论

[] == ![]  返回 true

posted on 2017-05-12 20:53  bbb324  阅读(422)  评论(0编辑  收藏  举报

导航