需要考虑的几个方面
- 参数校验
- 判断对象逻辑
- typeof 判断对象的话需要排除 bull
- 或者利用
Object.prototype.toString.call(obj)
判断[Object Object]/[Object Array]
- 数组对象处理
- 循环对象处理
- 利用额外一个数组潜拷贝每一次处理过的对象,并在处理下一个对象之前判断是否已经处理过一样的对象
- 也可以使用Set,Map,WeakSet或WeakMap
- 栈溢出的问题
- 即对象过深,递归爆栈,这问题只会出现深度优先递归
- 这种情况可以考虑用广度优先函数进行深拷贝
工具函数
let _toString = Object.prototype.toString
let map = {
array: 'Array',
object: 'Object',
function: 'Function',
string: 'String',
null: 'Null',
undefined: 'Undefined',
boolean: 'Boolean',
number: 'Number'
}
let getType = (item) => {
return _toString.call(item).slice(8, -1)
}
let