深拷贝
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]