浅拷贝
定义:拷贝的就是内存地址 ,所以如果其中一个对象改变了这个地址,就会影响到另一个对象。直接通过一个对象赋值给另一个对象即可 a = b。
深拷贝
定义:将一个对象从内存中完整的拷贝一份出来,从堆内存中开辟一个新的区域存放新对象,且修改新对象不会影响原对象。
1、concat() 拼接
var arr = [];
var arr1 = [].concat(arr);
2、slice() 截取
var arr = [];
var arr1 = arr.slice();
3、for循环或者递归的方式实现
var arr = [];
var arr1 = [];
for(var i=0; i<data.length;i++){
arr1.push(arr[i]);
}
// 递归
function _deepClone(source){
let target;
if(typeof source === 'object'){
target = Array.isArray(source) ? [] : [];
for( let key in source) {
if(source.hasOwnProperty(key)) {
if(typeof source[key] !== 'object') {
target[key] = source[key];
} else {
target[key] = _deepClone(source[key]);
}
}
}
} else {
target = sourece;
}
return target;
}
4、通过JSON进行类型转换
var arr1 = JSON.parse(JSON.stringify(arr)); //深拷贝常用方法
5、ES6 扩展运算符(...)
var arr3 = [...arr];