数组的复制
浅拷贝
1.使用=进行浅拷贝
var arr=[1,2,3];
var arr1=arr;
console.log(arr);//[1, 2, 3]
console.log(arr1);//[1, 2, 3]
arr[1]=4;
console.log(arr);//[1, 4, 3]
console.log(arr1);//[1, 4, 3]
复制的是引用,两个数组指向同一个地址
深拷贝
1.for循环复制
var arr = [1,2,3,4,5]
var arr2 = copyArr(arr)
function copyArr(arr) {
var res = []
for (var i = 0; i < arr.length; i++) {
res.push(arr[i])
}
return res
}
2.slice()复制
var arr = [1,2,3,4,5]
var arr2 = arr.slice(0)
arr[2] = 5
console.log(arr)
console.log(arr2)
效果如图
3.concat()方法
var arr = [1,2,3,4,5]
var arr2 = arr.concat()
arr[2] = 5
console.log(arr)
console.log(arr2)
4.ES6扩展运算符实现数组的深拷贝
var arr = [1,2,3,4,5]
var [ ...arr2 ] = arr
arr[2] = 5
console.log(arr)
console.log(arr2)
对象的复制
深拷贝
1.万能的for循环实现对象的深拷贝
var obj = {
name: 'FungLeo',
sex: 'man',
old: '18'
}
var obj2 = copyObj(obj)
function copyObj(obj) {
let res = {}
for (var key in obj) {
res[key] = obj[key]
}
return res
}
2.转换成json再转换成对象实现对象的深拷贝:JSON parse/ strinigfy
var obj = {
name: 'FungLeo',
sex: 'man',
old: '18'
}
var obj2 = JSON.parse(JSON.stringify(obj))
3.扩展运算符实现对象的深拷贝
var obj = {
name: 'Haley',
sex: 'girl',
old: '18'
}
var { ...obj2 } = obj
obj.old = '22'
console.log(obj)
console.log(obj2)
参考:
https://blog.csdn.net/fungleo/article/details/54931379
http://ourjs.com/detail/591020adf12390061496167e