在这种情况下
问题描述:
使用包括()函数我得到的数组A
和控制台显示我:在这种情况下
Array [ Object, Object ].
当我点击Object
元件中的一个,所述性质列在控制台上。
现在,我收到了一个变量B
,其中包含我的数组A
的第一个对象。我要检查这个使用includes
功能:
A.includes(B)
然而,返回false。使用includes()
有什么问题吗?
答
如果我正确理解你的问题,你的设置是这样的:
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
答
这对我来说很好,但你可能会因为严格平等的作品而被吊起来。一个对象不被认为与具有相同属性的另一个对象相等,除非该对象实际上是同一个对象。请看下面的例子:
const b = {} //some object
const A = [b, 2]
console.log(A.includes(b)) //true
console.log([{}, 2].includes(b)) //false because {} !== b
也许它并*不*包含相同的对象,然后。请注意,一个看起来相同的对象是不够的。 – Bergi