js的深拷贝的理解和实现
一:什么是深拷贝?
举例:a=b,正常情况下当改变a时b也改变,当改变a时b第一层不改变copy就是浅拷贝,当改变a时b底基层都不会改变就是深拷贝
二:实现深拷贝
1、最简单方法就是使用JSON.stringfy()和JSON.parse()。
var syb = Symbol('obj');
var person = {name :'tino',say: function(){console.log('hi');},ok: syb,un: undefined
}
var copyPerson = JSON.parse(JSON.stringify(person))
但是有局限性:当值为undefined
、function
、symbol
会在转换过程中被忽略,对象值有这三种的话用这种方法会导致属性丢失。
2、通用方法(递归复制)
deepClone => (obj){let objClone = Array.isArray(obj)?[]:{};if(obj && typeof obj==="object"){for(key in obj){if(obj.hasOwnProperty(key)){//判断ojb子元素是否为对象,如果是,递归复制if(obj[key]&&typeof obj[key] ==="object"){objClone[key] = deepClone(obj[key]);}else{//如果不是,简单复制objClone[key] = obj[key];}}}}return objClone;
}
另外注意obj.hasOwnProperty(key)有什么用?
使用了for in遍历数组,就需要用hasOwnProperty来规避遍历到原型链上的属性或方法
转载于:https://www.cnblogs.com/piaobodewu/p/10393863.html
js的深拷贝的理解和实现相关推荐
- 一篇文章彻底说清JS的深拷贝/浅拷贝
一篇文章彻底说清JS的深拷贝and浅拷贝 这篇文章的受众 第一类,业务需要,急需知道如何深拷贝JS对象的开发者. 第二类,希望扎实JS基础,将来好去面试官前秀操作的好学者. 写给第一类读者 你只需要一 ...
- js回调函数的理解(轉)
js回调函数(callback)理解Mark!讲之前说一句function say(){alert(,,,,,,,,)}var say=function (){alert(,,,,,,,)}var s ...
- javascript中浅拷贝和深拷贝的理解
javascript中浅拷贝和深拷贝的理解 什么是拷贝? 简单地说就是复制,对数据的复制 浅拷贝:改变拷贝者的值,被拷贝者的值也会变化 深拷贝:改变拷贝者的值,被拷贝者的值不会变化 由于基本数据类型是 ...
- Js模块化开发的理解
Js模块化开发的理解 模块化是一个语言发展的必经之路,其能够帮助开发者拆分和组织代码,随着前端技术的发展,前端编写的代码量也越来越大,就需要对代码有很好的管理,而模块化能够帮助开发者解决命名冲突.管理 ...
- Python中浅拷贝和深拷贝的理解与研究
Python中浅拷贝和深拷贝的理解与研究 单层浅拷贝 import copy a = 1 # 不可变数据类型 copy_a = copy.copy(a) print(id(a),id(copy_a)) ...
- 理解Babel是如何编译JS代码的及理解抽象语法树(AST)
Babel是如何编译JS代码的及理解抽象语法树(AST) 1. Babel的作用是? 很多浏览器目前还不支持ES6的代码,但是我们可以通过Babel将ES6的代码转译成ES5代码,让所有的浏览器 ...
- JS中setter/getter理解
JS中setter/getter理解 JS对象属性 get/set和getter/setter 数据属性 Object.defineProperty() 访问器属性 getter/setter创建及删 ...
- JS实现深拷贝常用的几种方法
JS实现深拷贝常用的几种方法 <!DOCTYPE html> <html lang="en"> <head><meta charset=& ...
- Js面向对象的程序设计——理解对象
Js面向对象的程序设计 Js面向对象的程序设计 理解对象 属性类型 Js面向对象的程序设计 理解对象 示例 : var person=new Object(); person.name="N ...
- Python中浅拷贝和深拷贝的理解与研究 1
Python中浅拷贝和深拷贝的理解与研究 单层浅拷贝 import copy a = 1 # 不可变数据类型 copy_a = copy.copy(a) print(id(a),id(copy_a)) ...
最新文章
- [亿能测试_www.gdtesting.com]测试技术资料网盘共享
- 如何给按钮加上链接功能
- 智·御未来 亚信安全巡展·2017即将起航
- 我写了14篇文章,总结了《具体数学》常用知识点
- LVM基础详细说明及动态扩容lvm逻辑卷的操作记录
- 获取验证码 60秒后重新获取
- 环境监测设备中,使用GPS模拟器测试TTFF和灵敏度的注意点
- Linux系统设置VIP(虚拟IP)的两种方式
- origin与matlab拟合的不同,Origin自定义模拟与matlab中cftool工具箱拟合结果比较 - 计算模拟 - 小木虫 - 学术 科研 互动社区...
- Python SVM手写数字识别
- php计算运费价格,PHP: UPS API, UPS 运费计算, UPS接口
- win7 增加Internet时间服务器
- Windows Server 2012 R2添加或删除角色和功能时提示无法打开匿名级安全令牌
- 基于JAVA汽车租赁系统计算机毕业设计源码+数据库+lw文档+系统+部署
- 纯干货!15000 字语法手册分享给你,看完搞懂,再也不担心SQL写不好了
- js for循环 遍历数组 遍历对象属性
- 食品安全溯源区块链解决方案探索
- STW(Stop The World)
- matlab表示dbm,关于信号强度单位db和dBm
- 简述供应商管理SRM系统
热门文章
- java delete file 失败_文件无法删除java.io.IOException: Unable to delete
- classcastexception异常_Java程序员必备:异常的十个关键知识点
- Kubernetes 小白学习笔记(27)--kubernetes的运维-Trouble Shooting方法
- oracle between 和大于小于性能_2.oracle伪例+序列
- JavaSE基础——Map集合、 Collections(集合工具类)
- 基于SSM疫情信息爬取与分析系统
- ios开发闹钟步骤_苹果快捷指令自动化(起床关闹钟后自动播放音乐)
- 图标字体化 android,Android 优化 图标文字 iconfont
- php多次登录失败,PHPCMS登录后台失败次数过多解决办法
- spring,springMVC,springBoot常用注解