js 数据深拷贝

一、数据为什么要深拷贝 ?深拷贝的好处在哪里?
        因为很多时候只是单单的一个值的内容赋值了到了新的值上面去,但是他们的作用域(储存空间)还是在同一个地方,这样就会导致修改了赋值后的数据,赋值的数据也会被修改,所以如果是赋值对象或者赋值数组就要使用深拷贝,深拷贝的好处就是修改了赋值后的内容,赋值的内容不会改变

二、详细讲解赋值、浅拷贝与深拷贝的区别

名称 是否在同一个作用域(储存空间) 第一次是基本类型 数据中有包含子对象
赋值 改变会一同改变原来的数据 改变会一同改变原来的数据
浅拷贝 改变不会改变原来的数据 改变会一同改变原来的数据
深拷贝 改变不会改变原来的数据 改变不会改变原来的数据

三、深拷贝方法

 1、最快最简单的JSON转换

var odjV2 = JSON.parse(JSON.stringify(odj))

缺点:

(1)如果对象里有函数,函数无法被拷贝下来

(2)无法拷贝copyObj对象原型链上的属性和方法

(3)当数据的层次很深,会栈溢出

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);

猜你喜欢

转载自blog.csdn.net/weixin_41854372/article/details/119608756