有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>