复习JavaScript时候, 思考"=="和"==="的区别, 当时只是简单的理解为: "=="比较的是值, 而"==="比较的是内存的地址 + 值是否相等.
但是, 当我编写如下的代码:
var o = {x: 1}, p = {x: 1}
o == p
却发现结果为false.
问题: 针对对象来说, 是如何判断其"=="性的?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
对于两个相同类型的值,
==等价于===。var o = {x: 1}, p = {x: 1}等价于var o = new Object({x: 1}), p = new Object({x: 1})对于两边都是对象的情况,他们两个比较的都是内存地址是否相同。
不同之处是,如果两端类型不同的时候
==会进行类型转换后比较,===直接返回 fasle搞清楚JS里提供的数据类型中那些是引用类型
两个对象直接
==对比返回false。若是比较
o.x==p.x则返回true。==比较两个值是否相等;===比较两个值是否相等同时比较类型是否相同。首先对于String,number等等的基本类型而言,两者有区别
--不同类型之间==会将其转化成同类型后比较值,类型不同===直接返回false
--同类型之间直接进行值得比较,没差别
其次对于Object等类型而言,两者没啥区别
--比较他们的指针地址
两个对象,
==也是比较引用正如楼上诸位所说,== 和 === 唯一的区别就是在两端类型不同的时候做不做类型转换。
这里我想追根溯源,为什么题主你”当时的“的理解出现了偏差呢?其实是你把”js中==和===的区别“与”java中==和equals()的区别“搞混了,而后者才是你所说的,一个是比较值(equals()),一个是比较地址(==)