👨🏻‍💻JavaScript浅拷贝与深拷贝

👨🏻‍💻JavaScript浅拷贝与深拷贝

原理

在JavaScript中一般简单类型是按值传递的;object与array是引用传递(就是传递地址,而不是值)

1
2
3
4
5
6
7
8
9
10
11
var a = 'tom';
var b = a;
b = 'chen';
console.log(a); // 'tom'
var a = {
name: 'tom'
};
var b = a;
b.name = 'chen';
console.log(a.name); // 'chen'

浅拷贝:只是保存拷贝值的地址,修改源对象会改变新对象的值

1
2
3
4
5
6
7
function extendCopy(p) {
var c = {};
for (var i in p) {
c[i] = p[i];
}
return c;
}

深拷贝:得到一个新的对象,修改新对象的属性不会影响原来的对象

1
2
3
4
5
6
7
8
9
10
11
12
function deepCopy(newObj, copyObj) {
var newObj = newObj || {};
for (var i in copyObj) {
if (typeof copyObj[i] === 'object') {
newObj[i] = (copyObj[i].constructor === Array) ? [] : {};
deepCopy(newObj[i], copyObj[i]);
} else {
newObj[i] = copyObj[i];
}
}
return newObj;
}

坚持原创技术分享,您的支持将鼓励我继续创作!