天天看点

原生JavaScript实现对象的完全深度拷贝

// 判断n是否是对象
function isObject(n) {
  return Object.prototype.toString.call(n).slice(8, -1) === 'Object'
}

// 判断n是否是数组
function isArray(n) {
  return Object.prototype.toString.call(n).slice(8, -1) === 'Array'
}

// 对象属性的深拷贝
function cloneDeep(obj) {
  if (!isObject(obj) && !isArray(obj)) {
    return console.log('请传递对象参数')
  }
  let object = isArray(obj) ? [] : {}
  // 获得对象的所有属性名称数组
  let keys = Reflect.ownKeys(obj)
  for (let key of keys) {
    object[key] = isObject(obj[key]) || isArray(obj[key]) ? cloneDeep(obj[key]) : obj[key]
  }
  return object
}
           

继续阅读