1-js深浅复制
首先让我们看几个例子
// eg1(操作原对象对复制对象无影响):
var a = 'a';
var b =a;
a = 'c';
console.log(b); // a
// eg2(操作原对象对复制对象有影响):
var a = {
a:'a'
};
var b =a;
a.a = 'c';
console.log(b); // {a:'c'}
// eg3(操作原对象对复制对象无影响):
var a = {
a:'a'
};
var b =a.a;
a.a = 'c';
console.log(b); // a
// eg4(操作复制对象对原对象有影响):
var a = {
a:'a'
};
var b = a
b.b = 'b';
console.log(a); // {a:'a',b:'b'}
// eg5(操作复制对象对原对象没有影响):
var a = {
a:'a'
};
var b = a;
b = {
b:'b'
}
console.log(a); // {a:'a'}
// eg6 es6 扩展运算符 深浅拷贝的影响
let obj = { a: 1, b: { c: 2 } };
let obj2 = { ...obj };
obj2.a = 3;
obj2.b.c = 4;
console.log(obj); // {a:1, b: { c: 4 }}
console.log(obj2); // {a: 3, b: { c: 4 }}
// eg7 数组的slice 和concat
let obj = ['iyongbao', score: { vue: 98 }]
let obj2 = obj.slice();
let obj3 = obj.concat();
obj[0] = "zhangsan";
obj[1].vue = 60;
console.log(obj); // {name: "zhangsan", score: { vue: 60 }}
console.log(obj2); // {name: "iyongbao", score: { vue: 60 }}
console.log(obj3); // {name: "iyongbao", score: { vue: 60 }}
基本数据类型于引用数据类型
堆内存和栈内存
详解js中的深浅复制
如何手写一个深拷贝
参考文献
Last updated