浅拷贝是拷贝一层,深层次的对象级别的就拷贝引用;深拷贝是拷贝多层,每一级别的数据都会递归拷贝出来。
对于基本类型,浅拷贝是对值的拷贝;对于对象来说,浅拷贝是对对象地址的拷贝,也就是拷贝的结果是两个对象指向同一个地址,修改其中一个对象的属性,则另一个对象的属性也会改变,而深拷贝则是开辟新的堆,两个对象对应两个不同的地址,修改一个对象的属性,不会改变另一个对象的属性。
深拷贝通用函数,可实现数组和对象的深拷贝,代码如下:
var objDeepCopy = function (source) {
var sourceCopy = source instanceof Array ? [] : {};
for (var item in source) {
sourceCopy[item] = typeof source[item] === 'object' ? objDeepCopy(source[item]) : source[item];
}
return sourceCopy;
}