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

关于JavaScript对象全等比较测试输出结果的原因解析咨询

JavaScript对象全等比较结果解析

嘿,我来帮你拆解这道测试题的底层逻辑,核心其实是JavaScript里基本类型和引用类型的全等(===)比较规则差异。先把你的测试代码贴出来方便对照:

const obj1 = { c: 'c' }; 
const obj2 = { a: 1, b: [1], c: obj1 }; 
const obj3 = { a: 1, b: [1], c: obj1 }; 
console.log(obj2 === obj3); 
console.log(obj2.a === obj3.a); 
console.log(obj2.b === obj3.b); 
console.log(obj2.c === obj3.c); 

接下来逐个分析每个控制台输出的原因:

  • console.log(obj2 === obj3); → 输出false
    obj2和obj3是两个通过字面量独立创建的对象,在JavaScript中,引用类型(对象、数组、函数等)的全等比较,本质是判断两个变量是否指向内存中的同一个地址。这两个对象虽然内容完全一致,但它们是内存里的两个独立实例,所以全等比较结果为false。

  • console.log(obj2.a === obj3.a); → 输出true
    obj2.a和obj3.a都是基本类型值(数字1),基本类型的全等比较是直接对比它们的实际值,只要值相等结果就是true,和存储位置无关。

  • console.log(obj2.b === obj3.b); → 输出false
    数组属于引用类型,obj2.b和obj3.b是两个独立创建的数组(哪怕内容都是[1]),它们指向内存中不同的地址,所以全等比较结果为false。如果要对比数组内容是否一致,需要手动遍历或者用JSON.stringify()这类方法辅助,但===本身只比对引用地址。

  • console.log(obj2.c === obj3.c); → 输出true
    obj2.c和obj3.c都指向了同一个对象obj1,也就是说它们的引用地址完全相同,所以全等比较的结果自然是true。

内容的提问来源于stack exchange,提问作者Nathalie Nordström

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 10:42:34