1. 程式人生 > 其它 >js陣列複製(淺拷貝,深拷貝)

js陣列複製(淺拷貝,深拷貝)

陣列的直接賦值屬於陣列的淺拷貝,JS儲存物件都是存記憶體地址的,所以淺拷貝會導致新陣列和舊陣列共用同一塊記憶體地址,其中一個數組變化,另一個數組也會相應的變化。
陣列內部不含有引用型別,使用slice() 、concat() 和 assign() 方法都屬於陣列的深拷貝,一個數組變化,另一個數組不受影響。
陣列內部含有引用型別,使用slice() 、concat() 和 assign() 方法,非引用型別的值屬於深拷貝,引入型別的值屬於淺拷貝,一個數組變化,另一個也會相應的變化。

淺拷貝:

 深拷貝:

方法一:通過JSON.stringify轉化成字串再通過JSON.parse()解析成原陣列

方法二:利用jQuery的$.extend方法。

$.extend( [deep ], target, object1 [, objectN ] );

deep表示是否深拷貝,為true為深拷貝,為false,則為淺拷貝
target Object型別 目標物件,其他物件的成員屬性將被附加到該物件上。
object1 objectN可選。 Object型別 第一個以及第N個被合併的物件。

var newArr = $.extend(true,[],arr)