[] == false 和 !![] == true
2019-10-08 本文已影响0人
refire_zj
首先,大家应该都知道==和===的区别:==是相等操作符,先转换(具体转换规则可以参阅红皮书)再比较;===是全等操作符,仅比较不转换。
1、[] == false
右侧布尔值很简单,直接转换成0
[]不是基本数据类型,它是对象,所以需要调用valueOf方法(Array.prototype.valueOf(),但是Array没有实现valueOf方法,所以根据原型链,最终调用的是Object.prototype.valueOf):
[].valueOf()
得到的仍然是[],继续调用toString方法(Array.prototype.toString()):
[].toString()
得到""
""作为基本数据类型直接调用Number("")得到0
所以最终结果是true
2、!![] == true
!!比==的优先级更高,所以先看!![]:
![]得到false(操作数是对象的话逻辑非返回false),
然后再取非,得到true
很明显,true == true得到的结果是true