function judgeType(data) {
const toString = Object.prototype.toString //判断数据类型的方法
const map = {
'[object Boolean]': 'boolean',
'[object Number]': 'number',
'[object String]': 'string',
'[object Function]': 'function',
'[object Array]': 'array',
'[object Date]': 'date',
'[object RegExp]': 'regExp',
'[object Undefined]': 'undefined',
'[object Null]': 'null',
'[object Object]': 'object'
}
const dataType = toString.call(data) //得到data数据类型
return map[dataType]
}
function deepClone(data) {
const type = judgeType(data)
let obj
if (type === 'object') {
obj = {}
} else if (type === 'array') {
obj = []
} else {
return data
}
if (type === 'object') {
for (let key in data) {
obj[key] = deepClone(data[key]) //其值可能还是复杂数据类型,那么对其继续进行深拷贝,这里就涉及到了递归
}
} else if (type === 'array') {
for (let i = 0; i < data.length; i++) {
obj.push(deepClone(data[i]))
}
}
return obj
}
const obj = {name: 'wjt', age: 18, work: {}}
console.log(deepClone(obj) === obj)
console