美文网首页
ES6的深复制和浅复制

ES6的深复制和浅复制

作者: AmazingMax | 来源:发表于2018-11-16 17:53 被阅读30次

在制作echarts图表的时候,原本想把默认的模板设置复制过来加上新的个性设置,没想到把默认的模板设置也给改动了,思考了一下这应该是JavaScript的深复制和浅复制。

例子

例子1:

var a=[1,2,3];
var b=a;
b.push(4);
console.log(b);
console.log(a);

输出结果是什么?
alert(b); => 1234 ?
alert(a); => 123 ?
实际上结果并非我们想的那样:

console.log(b);//1234
console.log(a);//1234

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

那么,如果我们仅仅想让b变成1234呢?a和b要不同,我们如何来做。

var a=[1,2,3];
var b = [...a,4]
console.log(b);//1,2,3,4
console.log(a);//1,2,3

以上是es6的写法,假若操作的是一个对象怎么写?

例子2:

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

和上次的结果一样结果肯定两个都是输出浅复制。

如果只想改变a而不改变b呢?

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

结果出来如图所示:


输出结果

浅拷贝,利用for in 把a中属性拷贝给b,但是只是拷贝了一个副本,实际上当修改b的值是不会改变a的值的。

相关文章

  • 深拷贝与浅拷贝的理解及常用方法

    深拷贝和浅拷贝的区别 首先深复制和浅复制只针对像 Object, Array 这样的复杂对象的。简单来说,浅复制只...

  • iOS全解11:特殊问题

    1、浅拷贝和深拷贝的区别? 浅拷贝:只复制指向对象的指针,指针指向同一个地址,而不复制引用对象本身。深拷贝:复制引...

  • java 对象的拷贝

    拷贝:即复制 对象拷贝:即对象复制 java 对象拷贝分类:浅拷贝、深拷贝 java 对象的浅拷贝和深拷贝针对包含...

  • 拷贝与内存管理

    一、关于深拷贝和浅拷贝的总结 理解 本质上我认为区别在于复制是是指针复制(浅拷贝)还是复制到新的地址上(深拷贝) ...

  • Javascript对象的深浅拷贝

    开门见山,有人叫对象的复制为深复制浅复制,也有人叫深拷贝浅拷贝。其实都是copy。 深拷贝(递归复制,复制所有层级...

  • JS深浅拷贝

    浅拷贝 浅拷贝的意思就是只复制引用,而未复制真正的值。 深拷贝 深拷贝就是对目标的完全拷贝,不像浅拷贝那样只是复制...

  • 浅|深 复制

    浅复制 //只写main函数 //结果是 我们可以看到一旦pointArray1发生了改变pointArray2也...

  • 浅复制(浅拷贝)和深复制(深拷贝)

    js存储机制 JS中对象分为基本类型和复合(引用)类型,基本类型存放在栈内存,复合(引用)类型存放在堆内存。堆内存...

  • Java 浅拷贝和深拷贝 拷贝和复制

    Java 复制与拷贝 大纲 浅拷贝和深拷贝 浅拷贝就是复制对象的一个精确副本 ==对于基本数据类型就是复制值,对于...

  • python中的浅拷贝和深拷贝

    浅拷贝和深拷贝: 浅拷贝 shallow copy 浅拷贝是指在对象复制过程中,只复制一层变量,不会复...

网友评论

      本文标题:ES6的深复制和浅复制

      本文链接:https://www.haomeiwen.com/subject/ceimfqtx.html