一、双等号的问题
js
[] == ![] // true
题解:
- 左边是个数组,右边是个表达式,所以右边先算出来,
![]
一个数组前面加上一个感叹号,就相当于对这个数组去反,数组怎么去反呢?就得对这个数组进行布尔 判定,因为数组是对象,所以布尔判定出来的值为true
,加上!
就为false
,![]
就相当于false
- 所以
[] == ![]
就相当于[] == false
,如果是严格相等的话,肯定是false
- 但是用的双等,当使用双等号判断的时候,发现两边类型不一样,就会把两边转成原始类型,左边转原始类型,其实就是先调用数组的
valueOf()
方法,得到[]
,发现还不是原始类型 再去调用toString()
方法,得到''
,那么[] == false
就相当于'' == false'
,到这,已经是原始类型,但是左右两边类型还是不一致,那么双等号又去做一件事, 将两边转成数字,''
转成数字是0
,false
转成数字也是0
,所以返回true