[] == 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

上一篇 下一篇

猜你喜欢

热点阅读