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
相关产品推荐
相关产品推荐

