问题来源
var a = []; if(a) alert("true");//true if(a == true) alert("true");//false
原理
js引擎会先计算括号内的表达式然后将结果转换为布尔值,所以
if(a) => if(!!a) => true
if(a == true) => if(Number(a) == true) => if(0 == true) => false
注: 在比较的两个值中,如果有一个是布尔类型,那么另外一个值将会先被转换为数字类型再与其比较。
参考: 双等号的比较原理
所以,下面这个就会有看起来奇怪的结果
[] == ![] //true