function deepCopy (target) {
if (target) {
if (Array.isArray(target)) {
return target.map(item => {
return deepCopy(item)
})
} else if (target.toString() === '[object Object]') {
return Object.keys(target).reduce((obj, key) => {
obj[key] = deepCopy(target[key])
return obj
}, {})
}
}
return target
}
测试代码:
var test = {a: 'haha', b:undefined, c: null, d: [1, 2, undefined, NaN]}
var testCopied = deepCopy(test)
console.log(test === testCopied)
testCopied.a = 'hehe'
testCopied.c = NaN
testCopied.d[4] = 'success'
console.log(test, testCopied)
var test = [1, 2, {a: 'hahah', b: null}]
var testCopied = deepCopy(test)
console.log(test === testCopied)