【JavaScript手撕代码】深拷贝的三种实现

JSON.parse(JSON.stringify(obj))

项目中较常用,但有缺陷,无法处理undefinedSymbolFunction

const deepCopy = JSON.parse(JSON.stringify(obj))

lodash的__.cloneDeel()

const _ = require('lodash')
let obj = { a: 1, b: [1,2,3] }
let deepClone = _.cloneDeep(obj)

手写

利用递归实现

function deepClone(obj) {
    if(!obj || typeof obj === 'undefined') return;
    
    let deepCopy = Array.isArray(obj) ? [] : {}
    
    for(let key in obj) {
        if(obj.hasOwnProperty(key)) {
            deepCopy[key] = typeof obj[key] === 'object' ? deepClone(obj[key]) : obj[key]
        }
    }
    return deepCopy
}

你可能感兴趣的:(手撕JavaScript,javascript,前端,面试)