1.[]
!![] == true //true
[] == true //false
![] == [] //true
原因:[]是javascript中比较特殊的隐式转换
String([]) //""
Number([]) //0
Boolean([]) //true
[] == true // 0 == 1 ->false
// !是逻辑非,将布尔值求反;!!是类型转换,将对应类型转为Boolean型
![] == [] //![] -> false; false == 0 ->true
!![] == true //true == true ->true
不要晕,我们再来一段:
[] == 0 //true
![] == 0 //true (Boolean([])是true)
[] == "" //true
!![] == "" //false
"" == true //false
2. null 与 undefined
null == undefined //true
3. 一个是数字,一个是字符串 。先将字符串转为数字,再比较
4. 其中一个值是true,则将其转为1再比较;false亦然
5. 一个值是对象,另一个是数字或字符串。则将对象转为原始值,再比较。
对象通过toString()或valueOf()转换为原始值:
toString(): 返回一个反映这个对象的字符串;
valueOf(): 一个对象如果存在一个原始值,就将其转换为它的原始值。
JavaScript语言核心的内置类先尝试使用valueOf(),再尝试使用toString(),除了日期类,日期类只能使用toString转换。