深拷贝与浅拷贝

在js中提供了浅拷贝的API:

let target = {
     }

let source = {
     
    name: 'sam',
    age: '20'
}

target = Object.assign(source)

console.log(target)

在js中提供了深拷贝的API:

let source = {
     
    name: 'Sam'
}
let target = JSON.parse(JSON.stringify(source))

深拷贝与浅拷贝的实现原理

let checkType = (data) => {
     
    return Object.prototype.toString.call(data).slice(8, -1)
}


let deepType = (target) => {
     
    let targetType = checkType(target)
    let result
    if(targetType === 'Object') {
     
        result = {
     }
    }else if(targetType === 'Array') {
     
        result = []
    } else {
     
        return target
    }
    for(let i in target) {
     
        let value = target[i]
        let valueType = checkType(value)
        if(valueType === 'Object' || valueType === 'Array') {
     
            result[i] = deepType(value)
        } else {
     
            result[i] = value
        }
    }
    return result
}

let obj1 = {
     
    name: 'sam',
    likc: ['food', 'sleep', 'coding']
}

let obj2 = deepType(obj1)
obj2.likc[2] = "play game"
console.log(obj1)
console.log(obj2)

结果:
深拷贝与浅拷贝_第1张图片

你可能感兴趣的:(笔记)