[] == ![] 返回 true
对于==来说,如果数据类型不同,就会进行隐式类型转换。
- 首先判断是否在对比
null
和undefined
,是的话就会返回true;
- 判断其中一方是否为
string
,在与number
进行比较,是的话就会将字符串转换为number
;
- 判断其中一方是否为
boolean
,是的话就会把boolean
转为number
再进行判断; - 判断其中一方是否为
object
,是的话就会把object
转为原始类型再进行判断;转为原始类型时会调用valueOf()或 toString();
其流程图如下:
因此[] == ![]
是这么来的:
- 对象的非空引用是
true
,只有null
空引用为false
- 右边的
![]
即!true,
得到false
false
转为Number
是0true
转为0- 左边
[].toString()
得到`` Number(``)
得到00 == 0
,返回true
本文来自博客园,作者:辉太狼`,转载请注明原文链接:https://www.cnblogs.com/HuiTaiLang1216/p/15561776.html