博客
关于我
四、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/

你可能感兴趣的文章
(20200328已解决)从docker容器内复制文件到宿主机
查看>>
理解Docker ulimit参数
查看>>
Factor Exposure因子暴露
查看>>
理解DSL||AST||query clauses||X-Pack||JDBC||ODBC
查看>>
将DataFrame作为邮件正文HTML发送 in Python
查看>>
理解Library of Congress Cataloging-in-Publication Data
查看>>
理解Python系统下的时间格式
查看>>
《经济机器是怎样运行的》笔记(三)
查看>>
Python提升回测速度concurrnet.futures模块详解
查看>>
Python语言'类'概念再理解
查看>>
(2019.6.27)Anaconda清华镜像已恢复使用
查看>>
Robomongo使用教程:踩着前辈的路
查看>>
Python中Class类与def函数的区别
查看>>
OpenAI Gym简介及初级实例
查看>>
用Matplotlib和Gym优雅地呈现股票交易智体
查看>>
Github上量化交易相关项目汇总
查看>>
JS取出两个数组中的不同或相同元素
查看>>
Ubuntu 18.04 zip压缩文件及其文件 夹中的所以 内容
查看>>
int 转 CString
查看>>
Edit编辑框自动换行与长度
查看>>