【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' } ]
人人须日日改过,一旦无过可改,即一日无步可过矣。若发现不妥的点请务必指出,非常感谢。

浙公网安备 33010602011771号