博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
深拷贝vs浅拷贝
阅读量:6623 次
发布时间:2019-06-25

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

怎么解释深拷贝和浅拷贝?

简单点来说,就是假设B复制了A,当修改A时,看B是否会发生变化,如果B也跟着变了,说明这是浅拷贝,拿人手短,如果B没变,那就是深拷贝,自食其力。

常见的浅拷贝有哪些?

1. ...运算符
let obj={name:'jack',address:'shanghai'}let o = {...obj};obj.name = 'hello';console.log(o); //=>{name: "jack", address: "shanghai"}复制代码

这个看起来有点像深拷贝是不是? 别急再来一点变化。

let obj={name:'jack',address:{city:'shanghai',num:1}}let o = {...obj};obj.name = 'hello';obj.address.city='beijing'console.log(o); //{name: "jack", address:{city: "beijing",num: 1}}复制代码

所以我们知道深拷贝不仅仅是一维不影响并且朵唯也不影响。所以...运算符是浅拷贝;

2.slice/concat 这两个方法和1是一样的 一维的时候是深拷贝 但是多维是浅拷贝

如果实现深拷贝?

1.Json.parse 和json.stringify();
功能不完整 不能实现复杂的拷贝 例如函数。
2.递归拷贝
function deepClone(obj){	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') rerurn obj;	let cloneObj = new obj.constructor;	//找到数组或者对象的原型;	for(let key in obj){	   if(obj.hasOwnPrototype(key){	   //实现递归拷贝	       cloneObj[key] = deepClone(obj[key]);	   } 	}	return cloneObj;	}let obj = {name:1,address:{name:'shanghai',num:1}};复制代码

转载于:https://juejin.im/post/5cc00b6d5188250a7f630e93

你可能感兴趣的文章
What a C programmer should know about memory
查看>>
MySQL备份账号权限
查看>>
15个重要的Android代码
查看>>
(转)android 牛人必修 ant 编译android工程
查看>>
求最大公约数与最小公倍数
查看>>
C# Winform 跨线程更新UI控件常用方法总结(转)
查看>>
eclipse菜单栏不显示 + the system is running in lou-graphics mode问题
查看>>
【WebService】使用jaxb完成对象和xml的转换
查看>>
如何去除My97 DatePicker控件上右键弹出官网的链接 - 如何debug混淆过的代码
查看>>
多文档
查看>>
输入5个学生的信息(包括学号,姓名,英语成绩,计算机语言成绩和数据库成绩), 统计各学生的总分,然后将学生信息和统计结果存入test.txt文件中...
查看>>
Linux 小知识翻译 - 「协议(protocol)」
查看>>
elixir mix 简介
查看>>
HDU 1166 敌兵布阵
查看>>
BZOJ2337 [HNOI2011]XOR和路径
查看>>
C# 该行已经属于另一个表 ...
查看>>
前端面试题-2
查看>>
android 避免线程的重复创建(HandlerThread、线程池)
查看>>
手游-放开那三国socket协议分析
查看>>
Python学习第二天-编写三级菜单
查看>>