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]

 

posted @ 2018-04-02 21:06  endlessmy  阅读(496)  评论(0编辑  收藏  举报