js-基础 实现深拷贝

function deepCopy(obj){
   if (typeof obj !== 'object' || obj == null) return obj;
   let result = Array.isArray(obj) ? [] : {};
   for (let key in obj){
       if(obj.hasOwnProperty(key)){
           result[key] = deepCopy(obj[key]);
       }
   }
   return result;
}

对象是引用类型的值。常见的数字,字符串是值类型的值。存储的堆内存中的地址。

因为引用类型最好是复制他的地址,因为引用类型的值可能很大,考虑性能,存储。值类型占用的空间小。json可能很大,存储大。

简言之,在函数中通过递归的方法把每个值都存储到一个新的对象中,再返回。

实现思路

  1. 新建函数,以一个对象为参数
  2. 判断参数是否为对象,typeof 不为对象或等于null的,可以直接返回。
  3. typeof 为对象不为null的只有数组和对象类型
  4. 定义变量result,判断是否为数组,是(定义为数组),不是(定义为对象)
  5. for in 循环。获得对象的key 或 数组字符串的下标
  6. 判断对象是否有指定属性,是否有指定的键。
  7. 递归Copy对象对应的值(重复2-7),赋值给变量result
  8. 返回result。

hasOwnProperty() 方法会返回一个布尔值,指示对象自身属性中是否具有指定的属性(也就是,是否有指定的键)。

for...in 语句用于遍历数组或者对象的属性(对数组或者对象的属性进行循环操作)。

for in得到对象的key ,或者数组字符串的下标

for of 和 forEach 一样直接得到值。

for of不能对对象使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值