深拷贝

2022-05-08  本文已影响0人  前端Sultan
function deepClone(obj) {
  function isObject(o) {
    return (typeof o === 'object' || typeof o === 'function') && o !== null
  }

  if (!isObject(obj)) {
    throw new Error('非对象')
  }

  let isArray = Array.isArray(obj)
  let newObj = isArray ? [...obj] : { ...obj }
  Reflect.ownKeys(newObj).forEach(key => {
    newObj[key] = isObject(obj[key]) ? deepClone(obj[key]) : obj[key]
  })

  return newObj
}

lodash深拷贝地址

不完美的深拷贝

JSON.parse(JSON.stringify(object))

会忽略 undefined
会忽略 symbol
不能序列化函数
不能解决循环引用的对象

上一篇 下一篇

猜你喜欢

热点阅读