javascript中数组和对象的深拷贝和浅拷贝

1、首先理解一下“深拷贝”和“浅拷贝”的区别:

浅拷贝:a = b;//a和b中存的是相同的地址,该地址指向堆内存中相同的地方,即a和b就是一个东西,改变a的值b的值也会跟着改变,同理改变b的值a的值也会发生改变;

深拷贝:a和b中存的地址不同,但是地址对应的堆内存中的内容完全一致,即b是a的副本

2、

(1)数组和对象的浅拷贝一样  ,简单的赋值操作

var b = a;

如数组的浅拷贝:

var a = ['1','2','3'];
var b = a;
b[0] = '5';
console.log('a',a);
console.log('b',b);

输出的值为:


对象的浅拷贝:

var a = {name:'1',age:'2',color:'3'};
var b = a;
b.name = '5';
console.log('a',a);
console.log('b',b);

输出的值为:


(2)数组的深拷贝

ES5:var b = a.concat();

var a = ['1','2','3'];
var b = a.concat();
b[0] = '5';
console.log('a',a);
console.log('b',b);

输出的结果为:


ES6 let [...b] = a;

(3)对象的深拷贝

ES5: 

var a = {name:'1',age:'2',color:'3'};
function copyObj(a) {
var b = {};
for(var key in a) {
b[key] = a[key];
}
return b;
}
var c = copyObj(a);
c.name = '5';
console.log('c',c);
console.log('a',a);

输出的结果为:


ES6:

let {...b} = a;




猜你喜欢

转载自blog.csdn.net/m0_38102188/article/details/80105584