使用包括()函數我得到的數組A
和控制檯顯示我:在這種情況下
Array [ Object, Object ].
當我點擊Object
元件中的一個,所述性質列在控制檯上。
現在,我收到了一個變量B
,其中包含我的數組A
的第一個對象。我要檢查這個使用includes
功能:
A.includes(B)
然而,返回false。使用includes()
有什麼問題嗎?
使用包括()函數我得到的數組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