深浅拷贝

let a = 1
let b = a
b = 3
console.log(b) // 3

这是赋值(非要说就是深拷贝)

 

let arr = [1, 2, 3]
let newArr = arr
newArr.push(4)
console.log(newArr)  // 1,2,3,4
console.log(arr);    // 1,2,3,4

push 会影响原数组(数组和对象的赋值都叫做浅拷贝)

 

let arr = [1, 2, 3]
let newArr = [...arr]
newArr.push(4)
console.log(newArr)  // 1,2,3,4
console.log(arr);    // 1,2,3
let arr2 = [1,[2,3],[4,5]]
let newArr2 = [...arr2]
newArr2[1].push(666)
console.log(newArr2)  // [1,[1,2,666],[4,5]]
consloe.log(arr2)     // [1,[1,2,666],[4,5]]

解构赋值,针对一位数组和对象,可以看做是深拷贝

多维数组就是浅拷贝

 


 

// 深拷贝用法(1)
let list = [
    {id:1,name:'TM',age:18},
    {id:2,name:'小花',age:19},
    {id:3,name:'小米',age:20},
]

let mewList = JSON.parse(JSON.stringify(list));
newList.push({id:4,name:'小亮',age:21})
console.log(newList)

JSON转换:

  1.方法函数不能进行转换

 


    // 深拷贝--->专门针对引用数据类型
    function deepClone(source) {
        const targetObj = source.constructor === Array ? [] : {}
        for (let key in source) {
            if (source.hasOwnProperty(keys)) {
                if (source[key] && typeof source[key] === 'object') {
                    targetObj = source.constructor === Array ? [] : {}
                    targetObj = deepClone(source[key])
                } else {
                    targetObj[key] = source[key]
                }
            }
        }
        return targetObj
    }

 

posted @ 2022-04-28 20:55  TM_cc  阅读(29)  评论(0)    收藏  举报