Object
浅拷贝
- Object.assign
- 扩展运算符
- Array.prototype.slice
- Array.prototype.concat
对象的深拷贝
- 拷贝的对象的值中如果有函数,undefined,symbol 则经过 JSON.stringify()序列化后的 JSON 字符串中这个键值对会消失
- 无法拷贝不可枚举的属性,无法拷贝对象的原型链
- 拷贝 Date 引用类型会变成字符串
- 拷贝 RegExp 引用类型会变成空对象
- 对象中含有 NaN、Infinity 和-Infinity,则序列化的结果会变成 null
- 无法拷贝对象的循环应用(即 obj[key] = obj)
function cloneJSON(source) {
return JSON.parse(JSON.stringify(source));
}
function deepClone(obj) {
let cloneObj = {};
for (let key in obj) {
if (typeof obj[key] === "object") {
cloneObj[key] = deepClone(obj[key]);
} else {
cloneObj[key] = obj[key];
}
}
return cloneObj;
}
浅拷贝和深拷贝的区别
- 浅拷贝只拷贝内存地址
- 深拷贝