js 深拷贝

对于深拷贝 一直使用的都是 JSON 和 lodash 的方法, 今天空下来自己手写个 深拷贝方法, 把想到的一些情况, 包括对 函数、Symbol、正则、日期对象 都做了处理。 基本上满足了了日常需求。代码如下:

// 深拷贝
function deepClone(arg) {

  let typeIncludes = ['string', 'boolean', 'number', 'undefined'] // 基础类型
  let redundanceIncludes = ['null', 'symbol', 'function', 'regexp', 'date'] // 冗余类型

  let typeObject = (obj) => Object.prototype.toString.call(obj).slice(8, -1).toLowerCase()

  function dealArray(item) {
    let arr = item.map( i => {
      return deepClone(i)
    } )
    return arr
  }

  function dealObject(obj) {
    let newObj = {}
    for (const key in obj) {
      newObj[key] = deepClone(obj[key])
    }
    return newObj
  }

  if(typeIncludes.includes(typeObject(arg)) || redundanceIncludes.includes(typeObject(arg)) ) return arg

  return typeObject(arg) === 'array' ? dealArray(arg) : dealObject(arg)
  
}

有不足的地方, 还请评论区留言??

转载于:https://www.cnblogs.com/vant850/p/11503528.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值