javascript - var o = {x: 1}, p = {x: 1}, o == p ==> false?
PHP中文网
PHP中文网 2017-04-11 13:11:47
[JavaScript讨论组]

复习JavaScript时候, 思考"=="和"==="的区别, 当时只是简单的理解为: "=="比较的是值, 而"==="比较的是内存的地址 + 值是否相等.
但是, 当我编写如下的代码:

var o = {x: 1}, p = {x: 1}
o == p

却发现结果为false.

问题: 针对对象来说, 是如何判断其"=="性的?

PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(7)
怪我咯

对于两个相同类型的值,==等价于===

var o = {x: 1}, p = {x: 1}等价于var o = new Object({x: 1}), p = new Object({x: 1})

ringa_lee

对于两边都是对象的情况,他们两个比较的都是内存地址是否相同。

不同之处是,如果两端类型不同的时候== 会进行类型转换后比较,=== 直接返回 fasle

高洛峰

搞清楚JS里提供的数据类型中那些是引用类型

大家讲道理

两个对象直接==对比返回false
若是比较 o.x==p.x则返回true
==比较两个值是否相等;
===比较两个值是否相等同时比较类型是否相同。

PHP中文网

首先对于String,number等等的基本类型而言,两者有区别
--不同类型之间==会将其转化成同类型后比较值,类型不同===直接返回false
--同类型之间直接进行值得比较,没差别

其次对于Object等类型而言,两者没啥区别
--比较他们的指针地址

PHP中文网

两个对象,== 也是比较引用

阿神

正如楼上诸位所说,== 和 === 唯一的区别就是在两端类型不同的时候做不做类型转换。

这里我想追根溯源,为什么题主你”当时的“的理解出现了偏差呢?其实是你把”js中==和===的区别“与”java中==和equals()的区别“搞混了,而后者才是你所说的,一个是比较值(equals()),一个是比较地址(==)

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号