!![] == true //结果是true
[] == true //结果是false
![] == [] //结果是true
为什么会这样呢?我们会想到相等运算符(== ),当两个操作数类型不同时就会进行转换。
让我们先复习一下
[] 转为字符串是 "" // String([]) 返回""
[] 转为数字是 0 // Number([]) 返回0
[] 转为布尔值是 true // Boolean([]) 返回true
true 转为数字是 1 // Number(true) 返回1
false 转为数字是 0 // Number(false) 返回0
1.我们先看!![]==true
! (逻辑非),会将操作数的布尔值求反,而!! 就是类型转换,将对应的类型转换为boolean型
所以我们看一看,[ ]一次求反 (![]) 返回的就是false,再求反(!![ ]) 返回的就是true。
最后的比较就变成 true == true 自然结果是 true
!(逻辑非)会将操作数的布尔值求反,!! 就是类型转换,将对应的类型转换为boolean型,
即[ ]原本是true,取反后为false,再次求反就是true,所以最终得到true==true
2. []==true
相等运算符(==) 在遇到两个操作数类型不同的时候,要遵守的规则和类型转换
true 会转为1
[ ] 会转为 0
最后是比较的是 0 == 1,所以结果是false
3.![] == []
![ ] ,也就是 [ ] 先转为 布尔值true,然后求反,就是false,false 转为数字就是0
[ ]转为数字就是0
最后就是 0 == 0 ,所以结果就是true