var a =123; var b =a; // 这就是b拷贝了a // 浅拷贝: 就只拷贝了地址
// 拷贝目的 就是 复制数据
// 浅拷贝原因是只有一个数据,内存中只有一个地址
// 数据存放在内存中,内存分为 栈 和 堆
// 数组,对象,函数 都是放在堆中的,都是存在一个地址
// 基本类型数据 在栈中 赋值为的是数据 或者指针
// 基本类型数据拷贝 是深拷贝
// 引用类型 浅拷贝
复杂结构深拷贝
var dataa = [
{name:'aa',list:[
{name:'bb'}
]}
]
function reCopy(data){
if(Array.isArray(data)){
var res = [];
for(var i =0;i<data.length;i++){
if(data[i] instanceof Object){
var copy = reCopy(data[i]);
res.push(copy);
}else{
res.push(data[i]);
}
}
return res;
} else if(data.constructor ===Object){
var res = {};
for(var x in data){
if(data[x] instanceof Object){
var copy = reCopy(data[x]);
res[x] = copy;
}else{
res[x] = data[x];
}
}
return res;
}
}
reCopy(dataa);
深拷贝对象
var obj = {
name: 'aaa',
age: 123,
a: {
aa: 'aa',
bb: 'bb',
}
}
function deepCopy(obj) {
var result = {};
for (var x in obj) {
if (obj[x].hasOwnproperty === Object) {
result[x] = deepCopy(obj[x]);
}
else {
result[x] = obj[x];
}
}
return result;
}
console.log(deepCopy(obj));
使用三目运算符的方法
var res = {
dog:1,
age:5,
data:[1,5,1,4,6],
};
function deepCopy(obj){
if(typeof obj !=='object'){
return;
}
var newObj = obj instanceof Array? []:{};
for(var x in obj){
newObj[x] = typeof obj[x] === 'object' ? deepCopy(obj[x]) : obj[x];
}
return newObj;
}
console.log(deepCopy(res));