手写深拷贝

1.简单的深拷贝

// 利用json.parse和json.stringfly来进行深拷贝
// obj 需要深拷贝的对象
function deepClone(obj) {
   return JSON.parse(JSON.stringify(obj))
}

缺点:

  1. json在转换的过程中不识别函数和symbol
  2. 对象有个inner属性指向他自己,如果用了json转换之后就不可以了,会报错

2. 手写实现深拷贝

// 需要首先判断传入的对象是否为一个数组

function isArray (arr) {

 return Object.prototype.toString.call(arr) === '[object Array]';

function deelClone(obj) {

 

  // 对常见的“非”值,直接返回原来值

  if([null, undefined, NaN, false].includes(obj)) return obj;

  if(typeof obj !== "object" && typeof obj !== 'function') {

    //原始类型直接返回

    return obj;

  }

  var objD = isArray(obj) ? [] : {};

  for(let i in obj) {

//检测一个对象是否含有特定的自身属性

    if(obj.hasOwnProperty(i)){

     objD[i] = typeof obj[i] === "object" ? deepClone(obj[i]) : obj[i];

    }

  }

  return objD;

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值