一、主要区别
浅拷贝即如果拷贝内容复合类型的值(数组、对象、函数),那么拷贝的是这个值的引用,而不是这个值的副本,所以改变其中一个值,另一个也会受影响。(基本类型值的拷贝和复合类型值的深拷贝都是再拷贝这个只的副本,前后指向的不是同一块内存地址。)
二、浅拷贝
浅拷贝例子:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>深拷贝,浅拷贝</title>
</head>
<body>
<script type="text/javascript">
var obj = { a:1, arr: [2,[3,4]] };
var shadowObj = shadowCopy(obj);
function shadowCopy(src) { //浅拷贝函数
var dst = {};
for (var prop in src) {
console.log(prop); //a //arr
if (src.hasOwnProperty(prop)) {
dst[prop] = src[prop];
}
};
return dst;
}
console.log(shadowObj.arr[1]); //[3,4]
shadowObj.arr[1] = 5;
console.log(shadowObj.arr[1]); //5
</script>
</body>
</html>
三、深拷贝
深拷贝的实现较为复杂,可以参考这篇文章:
深拷贝 http://jerryzou.com/posts/deepcopy/
深拷贝 http://jerryzou.com/posts/dive-into-deep-clone-in-javascript/