js基础及常考面试题之 [] == ![]结果为true, []==[]结果为false 详解

[] == ![]

第一步: !优先级高于==,故而先计算 ![]; 所有的对象都是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基础及常考面试题之 [] == ![]结果为true, []==[]结果为false 详解_第1张图片

在 JS 中类型转换只有三种情况,分别是:

转换为布尔值
转换为数字
转换为字符串

js中数值转化表格:
js基础及常考面试题之 [] == ![]结果为true, []==[]结果为false 详解_第2张图片

你可能感兴趣的:(面试)