javascript 深拷贝和浅拷贝

1、深拷贝方法:

1)、JSON.stringify与JSON.parse转化实现深拷贝和浅拷贝;

注意:当值为undefined、function、symbol 会在转换过程中被忽略。。。所以,对象值有这三种的话用这种方法会导致属性丢失。

function deepClone(obj){

    let _obj = JSON.stringify(obj),

        objClone = JSON.parse(_obj);

    return objClone

}

2)、递归实现深拷贝函数:

function deepCopy(obj) {

      var result = Array.isArray(obj) ? [] : {};

      for (var key in obj) {

        if (obj.hasOwnProperty(key)) {

          if (typeof obj[key] === 'object' && obj[key]!==null) {

            result[key] = deepCopy(obj[key]);  //递归复制

          } else {

            result[key] = obj[key];

          }

        }

      }

      return result;

    }


3)、Jquery方法

$.extend( [deep ], target, object1 [, objectN ] )

deep表示是否深拷贝,为true为深拷贝,为false,则为浅拷贝

target Object类型 目标对象,其他对象的成员属性将被附加到该对象上。

object1  objectN可选。 Object类型 第一个以及第N个被合并的对象。


4)、Object.assgin(), 数组的slice()可用来拷贝对象、数组都是基本数据类型的

例如:let obj = { a: 1,b:2}

let arr = [1,2];

元素值包含对象等则不可以用此方法深拷贝


2、浅拷贝

A数据内容修改会影响B数据内容变化;

你可能感兴趣的:(javascript 深拷贝和浅拷贝)