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)

posted @ 2022-05-30 15:51  冰冰~  阅读(651)  评论(0编辑  收藏  举报