美文网首页前端之路
javascript 深拷贝和浅拷贝

javascript 深拷贝和浅拷贝

作者: 小小_绿 | 来源:发表于2019-07-29 23:17 被阅读0次

    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 深拷贝和浅拷贝

        本文链接:https://www.haomeiwen.com/subject/wtcwrctx.html