var arr = [1,2,3];
var obj = {
i : 1,
j : 2
}
var arr1 = arr;
arr1[1] = 11;
console.log(arr);
console.log(arr1);
var obj1 =obj;
obj1.i = 11;
console.log(obj);
console.log(obj1);
运行结果:
我们发现,我们在改变arr1(obj1)后,原来的arr(obj)也跟着变了,原因是:复合类型的变量存的是指针
解决办法:
可能我们第一会想到的是遍历赋值,这样虽然能解决问题,但是却拉低了性能。
在js里面,我们可以这样处理:数组用一个空数组连接,obj用一个空obj连接。
var arr = [1,2,3];
var obj = {
i : 1,
j : 2
}
var arr1 = arr.concat([]);
arr1[1] = 11
console.log(arr);
console.log(arr1);
var obj1 = Object.assign({},obj);
obj1.i = 11;
console.log(obj);
console.log(obj1);
运行结果:
image.png
网友评论