4-对象的浅拷贝和深拷贝
大约 1 分钟
4-对象的浅拷贝和深拷贝
传址,传值,内存 堆栈的一个知识点 复杂数据类型 浅拷贝:复杂数据类型的传址 深拷贝:完全赋值一份数据一致的非同一个地址的数据
深拷贝
JSON.parse(JSON.stringify(obj))
JSON.parse(JSON.stringify(obj))
对象转换成字符串,然后再转换为对象
缺点是 undefined
和 函数 无法赋值
最标准常用的深拷贝方法是递归进行拷贝
// 简易深拷贝
function deep(obj) {
// 判断数据类型是否是数组/对象 进行新数据声明
if (!(obj instanceof Object) || !(obj instanceof Array)) {
return obj;
}
// 新建一个新的地址
var targetObj = obj instanceof Array ? [] : {};
// 循环 obj
for (const key in obj) {
// 忽略从原型继承的属性,不进行拷贝
if (obj.hasOwnProperty(key)) {
const value = obj[key]; //对应的value
// 判断 value 是否是数组对象?
if (value instanceof Array || value instanceof Object) {
// 递归复制新的地址数据
targetObj[key] = deep(value);
} else {
targetObj[key] = value;
}
}
}
}
obj = {
a: "er",
b: 123,
c: () => {
alert("你好");
},
d: undefined,
};
// 缺少了环 正则 时间 函数等特殊地方的处理
console.log(deep(obj));
缺少了环 正则 时间 函数等特殊地方的处理 但是对于初级前端够了