2017-08-04 182 views
0

使用包括()函数我得到的数组A和控制台显示我:在这种情况下

Array [ Object, Object ]. 

当我点击Object元件中的一个,所述性质列在控制台上。

现在,我收到了一个变量B,其中包含我的数组A的第一个对象。我要检查这个使用includes功能:

A.includes(B) 

然而,返回false。使用includes()有什么问题吗?

+2

也许它并*不*包含相同的对象,然后。请注意,一个看起来相同的对象是不够的。 – Bergi

回答

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 
2

这对我来说很好,但你可能会因为严格平等的作品而被吊起来。一个对象不被认为与具有相同属性的另一个对象相等,除非该对象实际上是同一个对象。请看下面的例子:

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