第一次写博客有什么问题可以互相讨论哈
我们都知道在js中对象的传值是地址传值,而我们在拷贝对象的时候需要注意的是如果对象中的属性值是对象,那么我们的思路应该是这样子的:
1.第一步,因为对象中的属性也是对象,那么我们首先想到的是递归方法
2.如果区分属性的值是对象还是数组,因为我们tyopof(object||array)的时候返回的结果都是object,那么我们就要用Object.prototype.toString.call()来区分
//深度克隆
let obj = {
name: '111',
age: 18,
user: {
name: '测试',
title: '文章'
},
arr: [1, 2, 3, 4],
getter: () => {
console.log('打印')
},
a: null,
}
console.log(obj.a)
let obj1 = {}
function copy(obj, obj1) {
let str = Object.prototype.toString
let typestr = "[object Object]"
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
if (str.call(obj[key]) == '[object Null]') {
obj1[key] = obj[key]
} else {
if (typeof(obj[key]) == 'object') {
obj1[key] = str.call(obj[key]) == typestr ? {} : []
copy(obj[key], obj1[key])
} else {
obj1[key] = obj[key]
}
}
}
}
return obj1
}
copy(obj, obj1)
console.log(obj1, obj)