美文网首页前端之路
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中的浅拷贝和深拷贝js 深拷贝 vs 浅拷贝深入剖析 JavaScript 的深复制...

  • 深入理解JavaScript中的堆与栈 、浅拷贝与深拷贝

    JavaScript中的浅拷贝与深拷贝 学了这么长时间的JavaScript想必大家对浅拷贝和深拷贝还不太熟悉吧,...

  • js浅拷贝和深拷贝

    javaScript的变量类型 javaScript的变量类型基本类型:引用类型: 浅拷贝和深拷贝的区分 浅拷贝浅...

  • iOS深拷贝(MutableCopy)与浅拷贝(Copy)的区别

    深拷贝和浅拷贝的概念 iOS中有深拷贝和浅拷贝的概念,那么何为深拷贝何为浅拷贝呢?浅拷贝:浅拷贝并不拷贝对象本身,...

  • JavaScript深拷贝、浅拷贝

    JavaScript深拷贝、浅拷贝 浅拷贝:浅拷贝只是复制了内存地址,如果原地址中的对象改变了,浅拷贝出来的对象也...

  • 初探浅拷贝&深拷贝

    思考 这个代码为什么具有深拷贝作用 浅拷贝与深拷贝 在JavaScript中,对于Object和Array这类引用...

  • 理解JavaScript中浅拷贝和深拷贝的区别

    要理解 JavaScript中浅拷贝和深拷贝的区别,首先要明白JavaScript的数据类型 JavaScript...

  • 浅拷贝和深拷贝

    今天来讨论一下javascript中的浅拷贝和深拷贝。 首先我们先来看一下两个问题: 1.什么叫浅拷贝和深拷贝? ...

  • iOS面试题-第二页

    11.深拷贝和浅拷贝的理解. 深拷贝;拷贝的内容. 浅拷贝:拷贝的指针. 深拷贝如: NSMutableDicti...

  • iOS - copy 与 mutableCopy

    一说到拷贝,就不得不提浅拷贝和深拷贝。 何谓浅拷贝?何谓深拷贝? 往简单的说: 浅拷贝:拷贝地址。 深拷贝:拷贝内...

网友评论

    本文标题:javascript 深拷贝和浅拷贝

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