[]==![]为什么返回true?
作为新手前端,这个问题还是纠结我好几天了的!!!
首先看一下执行类型转换的规则:
1.如果一个运算符是Boolean值,在检查相等性之前,把它转化为数字,false->0, true->1.
2.如果一个运算符是字符串,另一个是数字,则把字符串尝试转化为数字。
3.如果一个运算符是对象,另一个是字符串,则把对象尝试转化为字符串。
4.如果一个运算符是对象,另一个是数字,则把对象尝试转化为数字。
然后分析一下比较过程:
1.![]的优先级高与==,先运算两侧的操作数,![]中的[]转化为true, !取反转化为false.此时变为 []==false
2.此时false为布尔值,转化为数字0, 变为[]==0
3.一边为对象,一边为数字,尝试把对象转化为数字进行比较,对[]取原始值,[].valueOf()得到[], 不是原始值,进一步调用toString()得到 '' (空字符串)。变为了''==0
4.到这里就很明显了,''==0,一边是字符串,一边是数字,将字符串转化为数字,''转化为数字为0,得到0==0这个表达式,结果返回true。