JavaScript中includes()检测嵌套数组返回false的原因是什么
问题说明
执行以下JavaScript代码时,控制台会依次输出true、false:
const myArray = [ [2, 4], "cat", "hamster", 9 ] console.log(myArray.includes("cat")) console.log(myArray.includes([2, 4]))
对应的疑问是:includes()方法是否无法识别数组中嵌套的数组元素?
结论与原理
- 不是
includes()无法识别嵌套数组,本质是它的相等判断规则决定了这个结果。 includes()采用**SameValueZero(零值相等)**规则做匹配,和严格相等===的逻辑基本一致:- 对字符串、数字这类原始值,直接比对值内容,所以
"cat"可以被正常匹配到,返回true。 - 对数组、对象这类引用类型值,比对的是值的内存引用地址,不是实际存储的内容。
- 对字符串、数字这类原始值,直接比对值内容,所以
- 代码里初始化
myArray时写入的[2,4],和传给includes()做参数的[2,4]是两个独立创建的数组实例,内存地址完全不同,自然会被判定为不相等,返回false。
验证示例:如果传入和嵌套数组是同一个引用的变量,
includes()就能正常匹配:const nestedArr = [2, 4] const myArray = [nestedArr, "cat", "hamster", 9] console.log(myArray.includes(nestedArr)) // 输出 true
内容的提问来源于stack exchange,提问作者lost bot
相关产品推荐
相关产品推荐

