表达式 [] == ![]
的结果是 true
。
这里需要注意的是 JavaScript
中的隐式类型转换,以及运算符的优先级和结合性。
首先,右侧的 ![]
表达式会把空数组转换为布尔值 true
,再进行逻辑非运算,结果为 false
。
然后,左侧的 []
表达式在比较相等性之前,会被强制转换为数字类型,因为比较运算符 ==
需要两边的操作数类型相同。由于数组是一个对象,对象在进行数字类型的强制转换时会先转换为字符串,再转换为数字。空数组转换为字符串后是一个空字符串 ""
,再转换为数字就是 0
。
因此,表达式变成了 0 == false
,在比较相等性时,布尔值 false
会被转换为数字类型 0
,所以结果为 true
。
扩展阅读
https://www.yuque.com/shih_hsing/nub4ks/occk2vlgnwd9zwi9?singleDoc# 《==与===区别》