js 深浅克隆

浅克隆

  浅克隆就相当于只是改变了一下指向地址

  

var arr  =  [32,44657,232,2,3,23,2,3];
var _arr = [];
for(let i = 0 ; i < arr.length ; i++){
  _arr.push(arr[i]);
}
console.log( arr[3] == _arr[3] );//true
console.log( arr == _arr);//false

深度克隆

  深度克隆就是如果不如数组中的 item 是一个数组, 那么就没法改变地址,地址还是原来的,所以需要深度克隆

  

function deepClone(arr){
                if (typeof arr == 'string' ||
                    typeof arr == 'number' ||
                    typeof arr == 'boolean' ||
                    typeof arr == 'undefined') {
                    return arr;
                } else if(Array.isArray(arr)){
                    var _arr = [];
                    for (let i = 0 ;i<arr.length;i++) {
                        _arr.push(deepClone(arr[i]));
                    }
                    return _arr;
                }else if (typeof arr == 'object') {
                    var _arr = {};
                    for (var k in arr) {
                        _arr[k] = deepClone(arr[k]);
                    }
                    return _arr;
                }
            }
            var arr = [1,23,4,[4,5,6]];
            var newarr = deepClone(arr);
            console.log(newarr[3] == arr[3]);//false

猜你喜欢

转载自www.cnblogs.com/lilei-site/p/11636398.html