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
试试