先看一段代碼: 為什麼會輸出 的是[1,2,3,4]而不是[1,2,3]。 因為實際上並不是新建一個和原對象(數組也是對象)完全一樣的對象,而是把原對象的記憶體地址直接複製給了另一個對象,也就是說兩個對象都是指向同一個記憶體地址,所以實際上它們就是同一個對象。arr2更改的同時就是更改了arr1。好似你 ...
先看一段代碼:
var arr1 = [1,2,3];
var arr2 = arr1;
arr2.push(4);
console.log(arr1)//[1,2,3,4]
為什麼會輸出 的是[1,2,3,4]而不是[1,2,3]。
因為實際上並不是新建一個和原對象(數組也是對象)完全一樣的對象,而是把原對象的記憶體地址直接複製給了另一個對象,也就是說兩個對象都是指向同一個記憶體地址,所以實際上它們就是同一個對象。arr2更改的同時就是更改了arr1。好似你的鑰匙(arr1)複製了一把(arr2)給別人,你可以把房門打開,別人那把也可以。你更改了房子(記憶體)裡面的東西,別人打開也是看到你更改了的那個樣子。
所以上面想分開只想操作arr2又不影響arr1,可以寫為
var arr1 = [1,2,3];
var arr2 = [].concat(arr1);
arr2.push(4);
console.log(arr1)//[1,2,3]