一、通过for in实现
function deepCopy1(obj) {
let o = {}
for(let key in obj) {
o[key] = obj[key]
}
return o
}
let obj = {
a:1,
b: undefined,
c:function() {},
}
console.log(deepCopy1(obj))
// { a: 1, b: undefined, c: [Function: c] }
二、通过JSON.stringfy和JSON.parse实现
需要注意到的是使用JSON,如果对象的属性是方法或者undefined,那么应该会导致其被忽略,且正则会被解析为{}
function deepCopy2(obj) {
let copy = JSON.stringify(obj)
return JSON.parse(copy)
}
let obj = {
a:1,
b: undefined,
c:function() {},
}
console.log(deepCopy2(obj))
// { a: 1 }
三、通过Object.keys Object.values Object.entries实现
function deepCopy3(obj) {
let copy = {}
for(let [key,value] of Object.entries(obj)) {
copy[key] = value
}
return copy
}
let obj = {
a:1,
b: undefined,
c:function() {},
}
console.log(deepCopy3(obj))
// { a: 1, b: undefined, c: [Function: c] }
四、通过Object.assign实现
function deepCopy4(obj) {
return Object.assign({}, obj)
}
let obj = {
a:1,
b: undefined,
c:function() {},
}
console.log(deepCopy3(obj))
// { a: 1, b: undefined, c: [Function: c] }