js中的克隆方法
1、如果克隆对象是基本类型,直接复制就行
1 var str1 = 'abc' 2 var str2 = str1 3 console.log(str2) //abc 4 str1 = '123' 5 console.log(str2) //abc
2、如果不是基本类型,就不能直接复制,以数组为例
1 var a=[1,2,3,4]; 2 var b= a; 3 var c=b; 4 c.pop(); 5 6 console.log(a) //[1,2,3] 7 console.log(b) //[1,2,3] 8 console.log(c) //[1,2,3]
克隆的几种方法:
一、比较简单的遍历数组赋值
1 var a = [1,2,3,4]; 2 var b = []; 3 for(var i = 0; i < a.length; i++){ 4 b.push(a[i]) 5 } 6 console.log(b) //[1,2,3,4]
二、slice方法
原理:从一个数组中截取出新的数组
接收两个参数,第一个参数开始的下标,第二个参数结束的下标(不包含)。
原数组不变。如果只设置一个参数,表示截取到最后。如果不写参数,表示实现数组的复制
1 var arr1 = [1, 2, 3, 4] 2 var arr2 = arr1.slice(0) 3 console.log(arr2) //[1,2,3,4] 4 arr1 = [4, 3, 2, 1] 5 console.log(arr2) //[1,2,3,4]
三、assign实现深浅拷贝
浅拷贝:
1 var obj = { a: 1 }; 2 var copy = Object.assign({}, obj); 3 console.log(copy); // { a: 1 } 4 5 6 var arr = [1,2,3]; 7 var copy = Object.assign([], arr); 8 console.log(copy); // [1,2,3]
深拷贝:
1 let arr1 = [1,2,3,4,5]; 2 let arr2 = JSON.parse(JSON.stringify(arr1)); 3 console.log(arr2) //[1,2,3,4,5]
四、concat方法
原理:拼接数组
返回拼接后的新数组,原数组不受影响
1 let arr1 = [1,2,3,4]; 2 3 let arr2 = arr1.concat() 4 5 arr2[1] = 9 6 console.log(arr1, arr2) //[1,2,3,4], [1,9,3,4]