[] == [];
[] === [];
都返回false
[]===[]
原因猜测是
相同类型的非原始类型,判断他们的指向是否相同,这里两个 []
各自创建了一个新的底层数组 所以返回不同
[] == []
返回 false
我无法理解
相同类型直接判断值的话应该返回 true
而按照 ==
的隐式转换原则[]
会调用 toString()
方法,得到 ''
空字符串。
两边的 []
都会得到 ''
然后再转换为数字 0
这样的话 不该返回 true 么
两个不同的实例对象
“如果两个操作数都是对象,则比较它们是不是同一个对象。如果两个操作数都指向同一个对象,
则相等操作符返回true;否则,返回false。”
直接从书上摘下来的。。。
[]==[]
两边两个数组是独立的两个对象,内存地址不同,所以结果是false。
这是隐式转换 数组或对象这种引用类型的变量 ==的时候 比较的是地址值,内存里放了两个东西,存储的位置当然不一样了。所以false
全等就好理解了 全等是在==的基础上再要求类型相同 前者是false 全等当然是false
代码读到[]或者{}就等于新创建一个数组或者对象,判断等号两边的[]不是同一个数组。
还有你说的隐式转换,是js在“合适的、需要转换的地方”才隐式转换。
比如'1'==1类型不同判断是否相等的时候,有一套转换先后的规则;
比如'abc'+123的时候,会把数字转为字符串;
比如if()判断中,他期望传入的是一个布尔值,如果你传入函数、对象、数字等等等等都会尝试将传入的东西转为布尔值。
需要类型转换的地方需要你注意下,[]==[]这个并不需要隐式转换,这个你看看==的判断规则。至于怎么转换那又是一套规则,查书就行了。
那你有试过{}=={}返回的是什么结果吗?