美文网首页
关于arr和obj复制改变原数据的问题

关于arr和obj复制改变原数据的问题

作者: 索哥来了 | 来源:发表于2017-08-01 17:38 被阅读0次
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);

运行结果:

image.png
我们发现,我们在改变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

相关文章

网友评论

      本文标题:关于arr和obj复制改变原数据的问题

      本文链接:https://www.haomeiwen.com/subject/kdtslxtx.html