有c++基础就是轻松理解

对象的深浅克隆

<body><script>var obj1 = {a: 1,b: 2,c: [44, 55, 66]}var obj2 = {};for(var k in obj1) {// 每遍历一个k属性,就给obj2也添加一个同名的k属性// 值和obj1的k属性值相同obj2[k] = obj1[k];}// c属性的值是引用类型值,那么本质上obj1和obj2的c属性是内存中的同一个数组,并没有被克隆分开,也叫浅克隆obj1.c.push(77);console.log(obj2); // obj2的c属性这个数组也会被增加77,因为克隆的就是内存啊</script></body>

代码如下:
<body><script>var obj1 = {a: 1,b: 2,c: [33, 44, {m: 55,n: 66,p: [77,88]}]};function deepClone(o) {// 要判断o是对象还是数组,数组也是对象,所以要写最前面if(Array.isArray(o)) {// 数组var result = [];for(var i = 0;i < o.length;i++) {result.push(deepClone(o[i]));}}else if(typeof o == 'object') {// 对象var result = {};for(var k in o) {result[k] = deepClone(o[k]);}}else {// 基本类型值var result = o;}return result;}var obj2 = deepClone(obj1);console.log(obj2);console.log(obj1.c == obj2.c); // false</script></body>
