js中数据的深浅拷贝

数据深浅拷贝

前言: js中数据分为基本类型和引用类型,基本类型变量在使用时可以被直接访问,不存在深浅拷贝一说;而引用类型,由于其值变量存放在堆中,栈中存放的是指向堆中值的地址,所有在使用引用类型变量时,使用的是栈中的引用地址。

深浅拷贝:简单来说就是把object类型的数据复制后进行修改,修改后的值对原值没有影响为深拷贝;反之,改变了原值就是浅拷贝。

由于object数据在复制后操作会影响到原值,在某些情况下并不是我们想要的,想要解决这个问题就要用到数据的深拷贝,对于数据深拷贝,本人比较喜欢如下两种,尤其是第一种在使用起来非常简单暴力:

  1. 把object转成json字符串,在将json串反转成object对象
let obj = {
	name: '美眉',
	gender: '女',
	age: '18',
	tag: ['美少女','小可爱','白富美']
}
let obj1 ;
let strObj = JSON.stringify(obj); 
obj1 = JSON.parse(strObj);
//obj1 = SON.parse(JSON.stringify(object));

花里胡哨的深拷贝JSON.parse(JSON.stringify(object)) 一句代码搞定 0.0 。

  1. 创建新的对象,递归循环直到其为基本类型然后复制过去

deepCopy: (data) => {
    let copyObj = data instanceof Array ? [] : {}
    for(item in data){
        if(typeof(item) === 'object'){
            obj[item] = deepCopy(data[item])
        }else{
            obj[item] = data[item]
        }
    }
    return copyObj
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值