今天練習時,我使用arr陣列,現在想要把新建乙個陣列儲存arr的資料,然後改變arr的值,等以後需要原來資料時候,就可以用了。
然後我突然意識到乙個問題:我能直接 var newarr=arr; 嗎?不能啊。原因看下面:
var arr=[1
,2,3
,4];
var newarr=arr;
console.
log(
"before change arr:"
,newarr)
;// now change arr
arr.
pop();
console.
log(
"after change arr:"
,newarr)
;
為什麼newarr也會改變,因為newarr與arr引用一樣,修改arr,newarr自然也會改變。
怎樣使兩者引用不同?目前暫時收集了三種方法:
var newarr1=arr.
concat()
;var newarr2=arr.
slice()
;arr.
pop();
console.
log(
"after change arr------------");
console.
log(
"newarr1:"
,newarr1)
;console.
log(
"newarr2:"
,newarr2)
;
可以看出,當arr尾部刪除乙個元素,新複製的兩個陣列沒有變化,說明與arr不同引用。
陣列的splice也可以用作複製,但是因為他會改變原陣列,應該叫做剪下,所以,不列入。
還可以遍歷陣列進行複製,太麻煩了,不列入。
var arr=[1
,2,3
,4];
var newarr=arr;
arr=
;console.
log(
"newarr:"
,newarr)
console.
log(
"arr:"
,arr)
如若有其他方法,以後再補。 陣列(引用型別)複製問題
陣列賦值問題涉及到拷貝 堆疊空間 基本資料型別和引用資料型別的差異。自行了解 var arra 1,2,3,4,5 var arrb arra 把b陣列值重置成0 arrb.fill 0 console.log arra console.log arrb 輸出結果是 arra 0,0,0,0,0 a...
js陣列賦值 引用 深複製 淺複製
如 var a 1,2,3,4 var b b a 這個不是把值賦值過去而是b作為a的引用,b改變的是a 如何b指向的是乙個新陣列,a把元素值全部賦值過去?1 普通陣列可以使用varb concat a 2 我遇到乙個jquery物件型別的陣列是 object array 型別,其拼接的陣列字串為 ...
js引用複製如何改變複製陣列不改變原陣列
我們需要知道的是object和array型別的變數為引用型別,也就是說其儲存的實際上並不是具體的值而是乙個指向堆記憶體的位址。因此當我們把乙個引用型別如 陣列 賦值給另乙個變數時,實際上是把另乙個變數指向了與之相同的位址,當我們改變其中乙個時,實際上改變了堆記憶體中的儲存內容 相應的所有指向該位址的...