为什么我的两个带有字符串元素的数组不相等?[复制]

Why my two arrays with string elements are not equal? [duplicate]

提问人:Neg K 提问时间:8/16/2022 最后编辑:M. JustinNeg K 更新时间:11/8/2023 访问量:349

问:

我有一个称为 ids_to_remove 的数组。当我在浏览器检查中输入它时,我得到以下结果:

ids_to_remove
(2) ['1', '2']

当我输入相同的数组时,我得到:

['1','2']
(2) ['1', '2']

当我比较元素时,我得到:

ids_to_remove[0]==='1'
true
ids_to_remove[1]==='2'
true

typeof(ids_to_remove[0])
'string'

但是当我比较数组时:

ids_to_remove===['1','2']
false

有谁知道为什么这两个数组不相等?

JavaScript 数组字符串 相等

评论

1赞 James 8/16/2022
检查 stackoverflow.com/questions/7837456/...
1赞 Starfish 8/16/2022
数组是对象,对象的比较是通过引用,而不是像上面那样通过值

答:

1赞 Talha Fayyaz 8/16/2022 #1

Javascript 数组是对象,您不能简单地使用相等运算符 == 来了解这些对象的内容是否相同。相等运算符只会测试两个对象是否实际上是完全相同的实例(例如 myObjVariable==myObjVariable,也适用于 null 和 undefined)。

您可以简单地使用此功能:

function arrayEquals(a, b) {
    return Array.isArray(a) &&
        Array.isArray(b) &&
        a.length === b.length &&
        a.every((val, index) => val === b[index]);
}

此函数仅适用于简单的非原始类型数组。

评论

0赞 Neg K 8/16/2022
谢谢!实际上,我比较数组的原因是我使用 ids_to_remove 作为另一个函数的输入,但它不起作用。当我只是在输入中手动编写 ['1','2'] 时,它会起作用,所以我试图了解有什么不同。