function deepCopy(obj) {
// 判断是否是date
if (obj.constructor === Date) return new Date(obj)
//判断是否是RegExp
if (obj.constructor === RegExp) return new RegExp(obj)
//如果是基本类型数据直接返回
if (obj instanceof Object === false) {
return obj
}
//判断数组还是对象
const result = Array.isArray(obj) ? [] : {}
//遍历对象中所有的属性
for (let key of Reflect.ownKeys(obj)) {
//确认对象的自有属性,而不是继承而来的
if (obj.hasOwnProperty(key)) {
if (typeof obj[key] === 'object') {
result[key] = deepCopy(obj[key])
} else {
result[key] = obj[key]
}
}
}
return result
}
const obj = {
reg: new RegExp('/我是一个正则/ig'),
name: 'lucy', age: 11,
func: function () { console.log('我是一个函数') },
date: new Date(0),
[Symbol('1')]: 1,
obj: { name: '我是一个对象', id: 1 },
str: '',
boolean: true,
unf: undefined,
arr: [0, 1, 2]
}
let obj1 = deepCopy(obj);
obj1.arr.push(1)//不会改变obj中的数组
console.log(obj1.arr, obj.arr)//[0,1,2,1],[0,1,2]