2017-08-04 311 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