Skip to content

一、双等号的问题

js
    [] == ![] // true

题解:

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

Released under the MIT License.