我们看一下这个例子:

let a={tile:'深复制'};
let b=a;
a.title='浅复制';

那么我们会获得两个对象,一个a,一个b,a的title是浅复制,b的title是深复制。
但结果真是这样吗?

我们console.log一下

为啥两个都是输出"浅复制"。。。。

其实,a,b是共用同一个地址,所以虽然看起来是两个对象,其实就是一个对象,a===b,这就是深复制,复制的不仅仅是数据,而且连地址一起复制过来了,相当于Windows的快捷方式,表面上看起来一个在C盘,一个在D盘,其实都是一个文件。

那么,如果我们仅仅想复制”深复制“这三个字呢?a的title和b的title要不同,我们如何来做。

let a={title:'深复制'};
let b={...a,content:"一个教程"};
a.title='浅复制';
console.log(a.title);
console.log(b.title);

我们再来看打印结果

这样我们虽然复制了a的所有数据,但是a和b是不同的对象,更改任意一个的数据,不会影响到第二个,而且b还可以对a 进行拓展,比如加了content一个字段。

添加一个字段很烦?那再来说说这个

let a=[1,23];
let b=[...a];
b[1]=32;
console.log(a); //[1, 23]
console.log(b); //[1, 32]

看到了么?ES6的剩余参数也可以直接做到深复制,完全不需要添加字段或者数组a.concat('')来进行复制

更新,上面这个不对,往下看

let a =[{a:1}]
let b = JSON.parse(JSON.stringify(a))
b[0].a=3 consloe.log(a[0].a) //

用json转才可以完成深赋值,因为字符串转成对象之后就是一个新的对象了;

最新文章

  1. Protocol Buffers(Protobuf) 官方文档--Protobuf语言指南
  2. SQL Server附加数据库文件出错
  3. 1002 GTY's birthday gift
  4. phpcms(1)phpcms V9 MVC模式 与 URL访问解析(转)
  5. 关于获得本机Mac Address的方法
  6. getline与get函数的区别
  7. 【锋利的Jquery】读书笔记一
  8. 快速部署PostgreSQL
  9. vmstat结果在不同操作系统上的解释
  10. c语言3种链接属性: 外部(external), 内部(internal),无设置(none)
  11. UML与软件建模:第一次作业(用例图绘制)
  12. 对类方法进行约束(类的抽象方法ABC+raise抛出异常 )
  13. 依赖注入容器之Castle Windsor
  14. Python: packer方式加密js代码之解密函数
  15. 在Ubuntu上安装pyenv 相关问题Common build problems
  16. CentOS升级Python2.6到Python2.7并安装pip
  17. java中File的delete和deleteOnExit区别(转)
  18. codeforces 497E Subsequences Return
  19. 3669. [NOI2014]魔法森林【LCT 或 SPFA动态加边】
  20. heatmap for arcgisjsapi

热门文章

  1. nyoj 952 : 最大四边形 (计算几何)
  2. 【leetcode】299. Bulls and Cows
  3. 查看windosw服务器型号和序列号
  4. A* 算法求第 K 短路
  5. 转载:mybatis中<![CDATA[]]>的作用
  6. linux 下 一步一步安装odb
  7. ajax传递json参数
  8. ctrl+r 调用bash曾经的历史命令
  9. leetcode 374猜数字大小
  10. day48—JavaScript键盘事件