【JavaScript前菜】数组的浅拷贝

数组的浅拷贝

谈及拷贝好像绕不开深浅问题,我认为所谓深拷贝一定是深到底的、是绝对的;而浅拷贝是有不同的浅度的。作为前菜,实在不该讨论这个问题。

一、使用"="复制

这点本不是我要的前菜,鉴于是浅拷贝的范畴就记录在这。

1 let obj = {name:'zhangsan'};
2 let arr1 = [1, 2, 3, obj];
3 // 使用‘=’拷贝,算是一种很浅很浅的拷贝,仅复制数组的引用
4 let arr2 = arr1;
5 arr1[0] = 4;
6 console.log('arr1:', arr1); // arr1: [ 4, 2, 3, { name: 'zhangsan' } ]
7 console.log('arr2:', arr2); // arr2: [ 4, 2, 3, { name: 'zhangsan' } ]

二、使用slice复制

1 let obj = {name:'zhangsan'};
2 let arr1 = [1, 2, 3, obj];
3 let arr3 = arr1.slice(0);
4 arr1[0] = 4;
5 arr1[3].name = 'lisi';
6 console.log('arr1:', arr1); // arr1: [ 4, 2, 3, { name: 'lisi' } ]
7 console.log('arr3:', arr3); // arr3: [ 1, 2, 3, { name: 'lisi' } ]

三、使用展开运算符复制

1 let obj = {name:'zhangsan'};
2 let arr1 = [1, 2, 3, obj];
3 let arr4 =  [...arr1];
4 arr1[0] = 4;
5 arr1[3].name = 'lisi';
6 console.log('arr1:', arr1); // arr1: [ 4, 2, 3, { name: 'lisi' } ]
7 console.log('arr4:', arr4); // arr4: [ 1, 2, 3, { name: 'lisi' } ]

 

人人须日日改过,一旦无过可改,即一日无步可过矣。若发现不妥的点请务必指出,非常感谢。

posted @ 2021-12-27 16:03  不乏理想的三师弟  阅读(82)  评论(0)    收藏  举报