一、数据为什么要深拷贝 ?深拷贝的好处在哪里?
因为很多时候只是单单的一个值的内容赋值了到了新的值上面去,但是他们的作用域(储存空间)还是在同一个地方,这样就会导致修改了赋值后的数据,赋值的数据也会被修改,所以如果是赋值对象或者赋值数组就要使用深拷贝,深拷贝的好处就是修改了赋值后的内容,赋值的内容不会改变
二、详细讲解赋值、浅拷贝与深拷贝的区别
名称 | 是否在同一个作用域(储存空间) | 第一次是基本类型 | 数据中有包含子对象 |
赋值 | 是 | 改变会一同改变原来的数据 | 改变会一同改变原来的数据 |
浅拷贝 | 否 | 改变不会改变原来的数据 | 改变会一同改变原来的数据 |
深拷贝 | 否 | 改变不会改变原来的数据 | 改变不会改变原来的数据 |
三、深拷贝方法
1、最快最简单的JSON转换
var odjV2 = JSON.parse(JSON.stringify(odj))
缺点:
(1)如果对象里有函数,函数无法被拷贝下来
(2)无法拷贝copyObj对象原型链上的属性和方法
(3)当数据的层次很深,会栈溢出
扫描二维码关注公众号,回复:
13583236 查看本文章
2、本人常用的方法
function copyObject(orig) {
var copy = Object.create(Object.getPrototypeOf(orig));
copyOwnPropertiesFrom(copy, orig);
return copy;
}
function copyOwnPropertiesFrom(target, source) {
Object
.getOwnPropertyNames(source)
.forEach(function (propKey) {
var desc = Object.getOwnPropertyDescriptor(source, propKey);
Object.defineProperty(target, propKey, desc);
});
return target;
}
var objV2 = copyObject(obj);