You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中为何{} == {}返回false?技术咨询

为什么{} == {}返回false?

嘿,这个问题绝对是JavaScript新手最容易踩的经典坑之一,我来给你掰扯清楚背后的逻辑~

首先要明确一个核心规则:在JavaScript中,所有对象(包括空对象{})的比较,不管用==还是===,本质都是比较「内存引用地址」,而不是对象的内容是否相同。

具体拆解你的疑问:

  • 当你写{} == {}时,这两个{}是完全独立创建的新对象,它们在内存里占据着两块不同的存储空间——就像你买了两个一模一样的空盒子,虽然外观完全一致,但它们是两个独立的个体。所以JavaScript会判定它们的引用地址不一样,返回false。
  • 你之前对{} === {}返回false的判断是对的,但误以为{} == {}会返回true就错啦:因为==在比较两个同类型的值(这里都是对象类型)时,不会做任何类型转换,直接和===一样比较引用地址,所以两者的结果都是false。

那什么时候对象比较会返回true?

只有当两个变量指向同一个对象的时候,比较结果才会是true。比如:

const emptyObj = {};
const sameEmptyObj = emptyObj; // 让sameEmptyObj指向emptyObj的内存地址

console.log(emptyObj == sameEmptyObj); // 输出true
console.log(emptyObj === sameEmptyObj); // 输出true

这里sameEmptyObj和emptyObj共享同一个内存引用,所以不管用==还是===比较,结果都是true。

如果想比较两个对象的内容是否相同怎么办?

如果要检查两个对象的内容是否一致,不能直接用==或===,你可以:

  • 自己写一个递归比较函数,遍历对象的每一个属性逐一对比;
  • 用JSON.stringify()把对象转成字符串后比较(注意:这个方法有局限性,比如对象里包含函数、undefined、循环引用时,转换结果会不准确);
  • 使用成熟工具库的方法,比如Lodash的_.isEqual()(这个能处理大部分复杂场景)。

内容的提问来源于stack exchange,提问作者Mario S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:51:46