首页 > 【JavaScript】[] == [] 与 [] === [] 返回 false 的原因

【JavaScript】[] == [] 与 [] === [] 返回 false 的原因

[] == [];
[] === [];

都返回false


[]===[]
原因猜测是
相同类型的非原始类型,判断他们的指向是否相同,这里两个 [] 各自创建了一个新的底层数组 所以返回不同


[] == []
返回 false 我无法理解
相同类型直接判断值的话应该返回 true

而按照 == 的隐式转换原则
[] 会调用 toString() 方法,得到 ''空字符串。
两边的 [] 都会得到 '' 然后再转换为数字 0
这样的话 不该返回 true 么


两个不同的实例对象


“如果两个操作数都是对象,则比较它们是不是同一个对象。如果两个操作数都指向同一个对象,
则相等操作符返回true;否则,返回false。”
直接从书上摘下来的。。。
[]==[]
两边两个数组是独立的两个对象,内存地址不同,所以结果是false。


这是隐式转换 数组或对象这种引用类型的变量 ==的时候 比较的是地址值,内存里放了两个东西,存储的位置当然不一样了。所以false
全等就好理解了 全等是在==的基础上再要求类型相同 前者是false 全等当然是false


代码读到[]或者{}就等于新创建一个数组或者对象,判断等号两边的[]不是同一个数组。

还有你说的隐式转换,是js在“合适的、需要转换的地方”才隐式转换。
比如'1'==1类型不同判断是否相等的时候,有一套转换先后的规则;
比如'abc'+123的时候,会把数字转为字符串;
比如if()判断中,他期望传入的是一个布尔值,如果你传入函数、对象、数字等等等等都会尝试将传入的东西转为布尔值。

需要类型转换的地方需要你注意下,[]==[]这个并不需要隐式转换,这个你看看==的判断规则。至于怎么转换那又是一套规则,查书就行了。


那你有试过{}=={}返回的是什么结果吗?

【热门文章】
【热门文章】