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

