當兩個數組中存在相同的對象引用時,這些對象是等效的,並且更新一個會影響另一個。js從兩個數組中刪除對象引用
但是從一個陣列刪除對象中的其他不刪除它。
爲什麼不呢?
var a1 = [
{i: 0, s: 'zero'},
{i: 1, s: 'one'}
];
var a2 = [
a1[0],
a1[1]
];
// items point to same reference
print(a1[0] === a2[0]); // true (equivalent)
// updating one affects both
a1[0].s += ' updated';
print(a1[0] === a2[0]); // true (still equivalent)
print(a1[0]); // {"i":0,"s":"zero updated"}
print(a2[0]); // {"i":0,"s":"zero updated"}
// however, deleting one does not affect the other
delete a1[0];
print(a1[0]); // undefined
print(a2[0]); // {"i": 0, "s": "zero"}
有趣的是,從一個屬性中刪除一個屬性,確實會影響到其他屬性。
delete a1[1].s;
print(a1[1]); // {"i":1}
print(a2[1]); // {"i":1}
https://jsfiddle.net/kevincollins/4j6hj2v7/3/
您刪除對該值的引用,而不是該值本身。看到它就像給一個人分配一個名字一樣。如果你不再叫他們克里斯,他們不會突然消失。 – Halcyon
對象使用引用進行分配。所以當你執行'a1 [0]'時,它將獲取其引用並將其複製到數組中,並將用它來訪問值。所以當你刪除引用時,你刪除了原始位置,因此它會反映在所有變量中。 – Rajesh
不要在數組中使用'delete'。只需將索引設置爲「null」或「undefined」。 – Bergi