zoukankan      html  css  js  c++  java
  • js中对象的浅拷贝和深拷贝的区别

    js中对象的浅拷贝和深拷贝的区别

    浅度拷贝:复制一层对象的属性,并不包括对象里面的为引用类型的数据,当改变拷贝的对象里面的引用类型时,源对象也会改变。

    深度拷贝:重新开辟一个内存空间,需要递归拷贝对象里的引用,直到子属性都为基本类型。两个对象对应两个不同的地址,修改一个对象的属性,不会改变另一个对象的属性。

    数据的类型:

    一般数据(值传递):字符,数值,布尔,undefined
    拷贝(复制)时,传递的是值,修改新数据,不会影响老数据
    复杂数据(引用传递):对象
    拷贝(复制)时,传递的是内存地址的指向,两个变量指向一个地址,修改新数据,会影响老数据

    var a = 10;
    function fn(a2){
    a2 = 20;
    }
    fn(a)
    console.log(a); //10

    对象的浅拷贝:值拷贝地址,不拷贝值

    var obj = {name:"admin"};
    function fn(obj2){
    obj2.name = "root";
    }
    fn(obj)
    console.log(obj) //name:root

    对象的深拷贝:不拷贝地址,只拷贝值

    var obj = {
    name:"admin"
    }
    var obj2 = {};

    for(var i in obj){
    obj2[i] = obj[i]
    }

    obj2.name = "root"

    console.log(obj)//name:"admin"
    console.log(obj2)//name:"root"

  • 相关阅读:
    对于Sobel算子的学习
    HDU 2594(求最长公共前后缀 kmp)
    HDU 6108(整除判断 数学)
    HDU 5968(异或计算 暴力)
    HDU 5963(游戏 博弈+规律)
    简单算法考题记录
    flex与bison
    C++ 智能指针
    Linux 添加设备驱动程序
    Linux 添加系统调用
  • 原文地址:https://www.cnblogs.com/li923/p/11573040.html
Copyright © 2011-2022 走看看