引用数据类型 栈内存 堆内存

let m = { a: 10, b: 20 };
let n = m;
n.a = 15;
console.log(m.a) // 15

原因:基本数据类型存储在栈内存中,引用数据类型存储在堆内存中 ,引用数据类型存储在堆内存中会在栈内存中创建一个指针,栈内存中的这个指针指向堆内存中的地址,所以let n=m;相当于n指针也指向和m相同的地址  修改n既修改m(既所说的浅拷贝)

 

想要避免这种情况可以如下操作(深拷贝)

let m = { a: 10, b: 20 };
let _m= JSON.parse(JSON.stringify(m)); //or _m={...m}
let n = _m;
n.a = 15;
console.log(m.a) // 10

 JSON.parse(JSON.stringify)这个方法可以简单粗暴的实现深拷贝,但是还存在问题,拷贝的对象中如果有函数,undefined,symbol,当使用过JSON.stringify()进行处理之后,都会消失。

参考文章:js中的浅拷贝与深拷贝_js深浅拷贝-CSDN博客 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值