[] == ![]
第一步: !
优先级高于==
,故而先计算 ![]
; 所有的对象都是true
,所以 []
为true
; 所以!true
就为false
即: [] == false
第二步:如果有一个操作数为布尔类型,则将布尔类型转化为数值类型
即: [] == 0
第三步: 将另一个操作类型转化为数值类型,[]转化为数值类型为0
即 0 == 0
故: 结果为 true
[] == []
左右两边类型相同,都是数组类型;但,数组或者对象在比较的时候,是比较他们的引用地址
如: var a = []; var b=a; console.log(a==b) -----------true
原因: a与b都是引用的同一个地址,a与b的随意一个改变,都会引起地址变化.
如: var a= [], b = [] ; console.log(a==b)--------------false
原因: a与b的地址不同
形象例子: 就好比[]
是一笼包子
第一种场景: a买了一笼包子, 并把这一笼子共享给了b, a与b也就共同拥有这一笼包子,谁吃都会减少
第二种场景: a买了一笼子,b也买了一笼子, a吃一个包子,b的那笼包子里并不会减少。
故而: 结果为false
附上==, === 的流程图
在 JS 中类型转换只有三种情况,分别是:
转换为布尔值
转换为数字
转换为字符串
js中数值转化表格: