咨询JavaScript中多个引用类型比较结果为false的原因
关于JavaScript引用类型比较结果的解释
核心规则:在JavaScript中,对象、数组、函数这类引用类型,用==或===比较时,判断的是两个值是否指向内存中的同一个地址,而非内容是否相同。
逐个分析代码案例
1. foo === foo // true
foo是指向某一函数对象的变量,比较时是同一个内存地址的引用,因此结果为true。
2. function(){} === function(){} // false
左右两边是两个独立创建的匿名函数,它们在内存中占据不同的地址,即便代码内容完全一致,地址不匹配就会返回false。
3. ['a'] == ['a'] // false
两个['a']是各自全新创建的数组对象,对应内存中的不同地址。==对引用类型依然比较地址,所以即便内容相同,结果也是false。如果需要比较数组内容是否一致,得手动遍历元素逐一校验,或者用JSON.stringify(['a']) === JSON.stringify(['a'])(注意这种方法无法处理函数、undefined等特殊值)。
内容的提问来源于stack exchange,提问作者Lee Lennon
相关产品推荐
相关产品推荐

