为何两个含字符串元素的JavaScript数组比较结果不相等?
为什么两个内容相同的数组用
===比较返回false? 在JavaScript中,数组属于引用类型,而===(严格相等运算符)对引用类型的比较逻辑和基本类型完全不同:
- 对于字符串、数字这类基本类型,
===比较的是值本身是否一致; - 但对于数组、对象这类引用类型,
===比较的是变量指向的内存地址,而非内容。
具体到你的场景
你定义的ids_to_remove是一个数组实例,它在内存中占据一块独立空间;而直接写['1','2']时,JavaScript会创建一个全新的数组实例,占据另一块不同的内存空间。哪怕两个数组的内容完全一致,它们的引用地址也不相同,所以ids_to_remove === ['1','2']会返回false。
你可以通过以下代码验证这一点:
const arr1 = ['1', '2']; const arr2 = ['1', '2']; console.log(arr1 === arr2); // false console.log(arr1 === arr1); // true(指向同一个内存地址)
如果需要比较数组内容是否相等
如果要判断两个数组的内容是否一致,可以用这些方法:
- 手动遍历元素比较:
function arraysEqual(arrA, arrB) { if (arrA.length !== arrB.length) return false; for (let i = 0; i < arrA.length; i++) { if (arrA[i] !== arrB[i]) return false; } return true; } console.log(arraysEqual(ids_to_remove, ['1','2'])); // true
- 使用
JSON.stringify()(注意:该方法有局限性,无法处理包含函数、undefined、循环引用的数组):
console.log(JSON.stringify(ids_to_remove) === JSON.stringify(['1','2'])); // true
- 使用数组的
every()方法:
const isEqual = ids_to_remove.length === ['1','2'].length && ids_to_remove.every((val, index) => val === ['1','2'][index]); console.log(isEqual); // true
内容的提问来源于stack exchange,提问作者Neg K
相关产品推荐
相关产品推荐

