在这种情况下使用includes()函数

时间:2017-08-04 14:30:44

标签: javascript arrays

我有一个数组A,控制台显示我:

Array [ Object, Object ].

当我点击其中一个Object元素时,控制台上会显示属性。

现在,我得到了一个变量B,其中包含我的数组A的第一个Object。我想使用includes函数检查:

A.includes(B)

但是,它返回false。使用includes()是否有问题?

2 个答案:

答案 0 :(得分:3)

如果我正确理解您的问题,您的设置如下:

const A = [ {hello: "world"}, {hi: "everyone"} ];
const B = {hello: "world"};
console.log(A.includes(B)); // returns false

A.includes(B)返回false,因为Javascript根据对象评估对象相等性。引用(它们存储在内存中),而不是它们的值。因此,即使B看起来像包含在A中,这两个对象也有不同的引用,因为它们是相互独立声明的。您可以在此处阅读有关Javascript中对象相等性的更多信息:http://adripofjavascript.com/blog/drips/object-equality-in-javascript.html

使用此信息,您可以更改设置,以便获得预期答案:

const A = [ {hello: "world"}, {hi: "everyone"} ];
const B = A[0];
console.log(A.includes(B)); // returns true

答案 1 :(得分:2)

这对我来说很好,但你可能会被包含在严格平等的作品中。除非另一个对象实际上是同一个对象,否则不认为对象具有相同属性的另一个对象。请参阅以下示例:

const b = {} //some object
const A = [b, 2]
console.log(A.includes(b)) //true
console.log([{}, 2].includes(b)) //false because {} !== b