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

为何两个含字符串元素的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(指向同一个内存地址)

如果需要比较数组内容是否相等

如果要判断两个数组的内容是否一致,可以用这些方法:

  1. 手动遍历元素比较:
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
  1. 使用JSON.stringify()(注意:该方法有局限性,无法处理包含函数、undefined、循环引用的数组):
console.log(JSON.stringify(ids_to_remove) === JSON.stringify(['1','2'])); // true
  1. 使用数组的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 15:15:31