我有一个数组A
,控制台显示我:
Array [ Object, Object ].
当我点击其中一个Object
元素时,控制台上会显示属性。
现在,我得到了一个变量B
,其中包含我的数组A
的第一个Object。我想使用includes
函数检查:
A.includes(B)
但是,它返回false。使用includes()
是否有问题?
答案 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