JS如何深度复制对象和数组,避免指针变量引用修改值

本文探讨了JavaScript中如何深度复制对象和数组以防止原对象被修改。通过使用`JSON.parse(JSON.stringify(objectOrArray))`的方法,可以实现内存地址变更,有效避免指针变量的问题。这种方法避免了手动创建复制方法的冗余,同时解释了为何直接赋值会导致原始对象和数组被影响,因为JavaScript中的Object和Array实际上是存储内存地址的指针类型。
摘要由CSDN通过智能技术生成
//自定义深度复制对象or数组的递归方法----------------------------------------
let copyObjOrArr = o => {
    let isArray = o instanceof Array;
    let isObject = o instanceof Object;
    if (!isObject) return o;     
    let n = (isArray ? [] : {});
    for (let k in o) n[k] = copyObjOrArr(o[k]);     
    return n;
}

//测试----------------------------------------

var obj={a:1};
var arr=[1,2,3];
var obj_new =copyObjOrArr(obj);
var arr_new =copyObjOrArr(arr);

console.log(obj_new);
console.log(arr_new);

如上图所示这样复制对象or数组就不会产生指针变量那种修改的情况了 


BUT!

我依然觉得上面的代码肽冗余,本质上我们只要复制了内容,并且保证变量指向的内存地址也发生改变就可以了

此刻,我想起了JSON.parse(JSON.stringify( objectOrArray )),这个把对象转为字符串再反转为对象的过程,就可以完成一次内存地址变更,于是有了代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值