美文网首页
JavaScript的深拷贝和浅拷贝

JavaScript的深拷贝和浅拷贝

作者: LuckyFBB | 来源:发表于2018-08-21 17:15 被阅读0次

基本数据类型:number、string、boolean、null、undefined。
引用数据类型(Object类):对象、数组、函数。

  1. 基本数据类型---名值都存在栈内存中
    let a=1
    栈内存
    当复制b=a的时候,栈内存会开辟一个新的内存。
    复制之后,栈内存
    即使修改a=2,这时候对b并不会有任何影响。
  2. 引用数据类型--名存在栈内存中,值存在于堆内存中,但是栈内存会提供一个引用地址指向堆内存中的值
    引用数据类型的内存
    当b=a进行拷贝的时候,其实复制的是a的引用地址,而并非堆里面的值
    浅拷贝
    当我们修改a[0]=1之后,由于a和b指向的同一个地址,所以b也受到影响,这就是浅拷贝。

    如果能在堆内存开辟一个新的内存专门存放b的值,就如同基本类型那样,就达到了深拷贝的效果了。
    深拷贝
  3. 实现深拷贝
  • 封装深拷贝函数
function deepClone(obj) {
    let tempClone = Array.isArray(obj) ? [] : {};    //判断是数组还是对象
    if (obj && typeof tempClone === 'object') {
        for (let key in obj) {
            if (obj.hasOwnProperty(key)) {
                if (obj[key] && typeof obj[key] === "object") {
                    tempClone[key] = deepClone(obj[key]);
                } else {
                    tempClone[key] = obj[key];
                }
            }
        }
    }
    return tempClone;
}
  • 使用JSON对象的parse和stringify
function deepClone(obj){
    let _obj = JSON.stringify(obj);
    let objClone = JSON.parse(_obj);
    return objClone
}
  • 借用JQ的extend方法
    $.extend( [deep ], target, object1 [, objectN ] )
    • deep表示是否深拷贝,为true为深拷贝,为false,则为浅拷贝
    • target Object类型目标对象,其他对象的成员属性将被附加到该对象上。
    • object1 objectN可选。Object类型第一个以及第N个被合并的对象。
let a=[0,1,[2,3],4];
let b=$.extend(true,[],a);

相关文章

  • 浅拷贝和深拷贝

    本文参考:JavaScript中的浅拷贝和深拷贝js 深拷贝 vs 浅拷贝深入剖析 JavaScript 的深复制...

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

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

  • js浅拷贝和深拷贝

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

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

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

  • JavaScript深拷贝、浅拷贝

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

  • 初探浅拷贝&深拷贝

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

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

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

  • iOS面试题-第二页

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

  • 浅拷贝和深拷贝

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

  • iOS - copy 与 mutableCopy

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

网友评论

      本文标题:JavaScript的深拷贝和浅拷贝

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