浅拷贝
浅拷贝就是复制 内存地址,相当于多个数组占用一个共同的内存地址
举个例子:
const arr1=['上海','北京','天津']
const arr2=arr1
//arr2 arr1共用一个内存地址
console.log(arr1,arr2) //两个一样
//修改arr2[0]
arr2[0]='未知'
console.log(arr1,arr2) //arr1[0] ,arr2[0] 的数据都会改变为未知
1. 浅拷贝复制 内存地址
2. 一个数组 改变数据,其他的所有数组都会受到影响改变数据
深拷贝
深拷贝就是 复制数组数据 每个都是不同的内存地址
举个例子:
const arr1=[1,2,3]
const arr2=[]
arr1.forEach(item=>{
arr2.push(item)
})
console.log(arr1,arr2) // arr1 arr2一样
//修改arr1
arr1[0]=0
console.log(arr1,arr2) // arr1:[0,2,3] arr2:[1,2,3]
1. 深拷贝复制 数组数据
2. 一个数组改变数据 , 其他数组的数据不会受到影响
jQuery中的深浅拷贝 - $.extend()
1. $.extend( 新,旧 ) --- 一维 深拷贝,多维 浅拷贝 - 没有递归 - 循环一次
举个例子:
const arr1 = [1,2,3,4,[5,6,7,8]]
$.extend( arr2 , arr1 )
console.log(arr1,arr2) //arr1 arr2 一样
//修改 arr1[0] = 0 arr1[4][0] = 0
arr1[0] = 0
arr1[4][0] = 0
console.log(arr1,arr2) //arr1:[0,2,3,4,[0,6,7,8]] arr2:[1,2,3,4,[0,6,7,8]]
2. $.extend( true , 新 , 旧 ) --- 一维多维 都 深拷贝 - 递归循环
举个例子:
const arr1 = [1,2,3,4,[5,6,7,8]]
$.extend( true, arr2 , arr1 )
console.log(arr1,arr2) //arr1 arr2 一样
//修改 arr1[0] = 0 arr1[4][0] = 0
arr1[0] = 0
arr1[4][0] = 0
console.log(arr1,arr2) //arr1:[0,2,3,4,[0,6,7,8]] arr2:[1,2,3,4,[5,6,7,8]]