js 中关于 [] == [] , [] == ![] 之 奇怪现象

471 阅读1分钟

首先, 打开浏览器的开发者工具,在 console 控制台下输入 [] == [], 得到的结果为 false

初学者可能会觉得很奇怪,按道理,两个空数组就是应该相等的呀,再看下图, 是不是觉得更加疑惑了:

                                 

仔细想想, 这是因为 js 对象中, 数组是一个引用类型, 在作比较运算时,比较的是内存中的地址值,两个不同的对象的地址值自然也不会相等,因此, [] == [] 结果为 false 似乎也说的通...

但是, 我们再看一下 [] == ![] ...

                                 

摸不着头脑了吧? 再看下图:

                                

难道 true == false? 这不太可能!

真相其实是:

                                 

[] == false == 0 这没错,那为何 ![] == false == 0 呢?看下图: 

                            

分析:

1.[].toString() 结果当然为 ‘’,在用 Number 函数转换后,为 0

2.比较等式的右边有 ! 运算符,则尝试用 Boolean 函数对 [] 作转换,为 false。然后再 toString() 为 ‘false’,!‘false’ 就是 false

3.最后可以得到 Number('') == Number(false),结果就为 true 了