博客
关于我
四、js的深浅拷贝(2021/4/24)
阅读量:314 次
发布时间:2019-03-04

本文共 980 字,大约阅读时间需要 3 分钟。

var obj = {   }; //obj变量保存在栈里面,而对象{   }存储在堆里面

1.浅拷贝赋值的区别

  • 当我们把一个对象赋值给一个新的变量时,赋的其实是该对象的在栈中的地址,而不是堆中的数据。也就是两个对象指向的是同一个存储空间,无论哪个对象发生改变,其实都是改变的存储空间的内容,因此,两个对象是联动的。
  • 浅拷贝:重新在堆中创建内存,拷贝前后对象的基本数据类型互不影响,但拷贝前后对象的引用类型因共享同一块内存,会相互影响。
  • 深拷贝:从堆内存中开辟一个新的区域存放新对象,对对象中的子对象进行递归拷贝,拷贝前后的两个对象互不影响。

深拷贝写法:

var person = {           name:'你好',        hobby:['学习',['可爱','活泼'],'向上'],        date : new RegExp('\\w+'),        function(){   }}function deepClone(obj){           var cloneObj = new obj.constructor();        if(obj == null) return obj;        if(obj instanceof Date) return new Date(obj);        if(obj instanceof RegExp) return new RegExp(obj);        if(typeof obj !== 'object') return obj;        for(var i in obj){                   if(obj.hasOwnProperty(i)){                           cloneObj[i] = deepClone(obj[i])                }        }        return cloneObj}var person1 = deepClone(person);console.log(person1);

浅拷贝的实现方式:

Object.assign()...concatlodash clone

深拷贝实现方式:

$.extenddeepClone

转载地址:http://much.baihongyu.com/

你可能感兴趣的文章
卷积神经网络六之CNN反向传播计算过程
查看>>
神经元与神经网络一之概述
查看>>
神经网络二之手写数字识别
查看>>
神经网络四之计算损失函数
查看>>
神经网络六之反向传播
查看>>
第五章 数字滤波器的基本结构之三
查看>>
第六章 IIR数字滤波器的设计方法之三全通系统
查看>>
FANUC机器人R-30iB_R-30iB PLUS备件规格型号统计整理
查看>>
如何在VM station虚拟机中安装西门子博途TIA PORTAL?
查看>>
FANUC机器人的镜像备份操作及U盘格式化具体步骤
查看>>
vue-依赖-点击复制
查看>>
vue如何配置兼容ie es6转es5
查看>>
js井子棋
查看>>
css取消双击选中文字
查看>>
LeetCode 116填充每个节点的下一个右侧结点指针
查看>>
C++小笔记——function绑定重载函数、私有继承用的条件
查看>>
最近一些算法题的总结
查看>>
2021-4-28【PTA】【L2-1 包装机 (25 分)】
查看>>
2021-5-2【指针】【作业】【指针代替下标进行数组编程】
查看>>
Arduino mega2560+MPU6050利用加速度值控制舵机
查看>>