一、通过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] }复制代码