一、深淺拷貝
在使用JS對數組或者object進行操作的時候,如果只是簡單的將它賦予其他變量,那么只要更改其中的任何一個,然后其他的也會跟着改變
舉例說明:
let arr = [1, 2, 3] let arr2 = arr arr[0] = 3 console.log(arr[0])//輸出3 console.log(arr2[0])//輸出3 let obj = { name: 'obj' } let obj2 = obj obj2.name='obj2' console.log(obj.name)//輸出obj2 console.log(obj2.name)//輸出obj2
解決思路:創建一個新的對象(數組)使用遍歷的方法把原有的數據加到新的對象(數組)里面
解決代碼:
function deepclone(obj){ let data if(Object.prototype.toString.call(obj)==='[object Array]'){ data=[] for (let index = 0; index < obj.length; index++) { data.push(deepclone(obj[index])) } }else if(Object.prototype.toString.call(obj)==='[object Object]'){ data={} for(let key in obj){ data[key]=deepclone(obj[key]) } }else { return obj } return data }
測試代碼:
let obj1 = {
name: 'obj1',
}
let obj2 = deepclone(obj1)
console.log(obj2.name)//輸出obj1
obj1.name='obj'
console.log(obj2.name)//還是輸出obj1
let arr = [1, 2, 3]
let arr2 =deepclone(arr)
console.log(arr2[0])//輸出1
arr[0]=9
console.log(arr2[0])//還是輸出1
以上測試代碼不嚴謹,但是懶啊,大家如果發現問題可以留言,一起學習共同進步 哈哈哈哈哈哈哈~~~~~!!!