javascript基本数据类型赋值和对象引用的内存情况分析

微信扫一扫,分享到朋友圈

javascript基本数据类型赋值和对象引用的内存情况分析
let c = {
name: '我的对象'
}
let d = c;
console.log(c, d);  // {name: "我的对象"} {name: "我的对象"}
d.name = "我是改变后的对象";
console.log(c, d);  // {name:"我是改变后的对象"}{name:"我是改变后的对象"}
复制代码

第一次输出c和b是c对象的原始值,后面我们改变了b对象下的name,第二次输出发现两个都被改变了,那为什么a也会被改变呢?

我来看看浏览器内存内部到底发生了什么!!!

打开浏览器内存,可以看到一堆内容,我们过滤掉其他无用的,只选取string类型下面的数据,发现b所修改的内存信息就显示在第二个,点击详情会看到下面红色框里面的内容。

d in system / Context @130419
c in system / Context @130419
复制代码

后面的@130419就是内存的地址,我们发现d和c的内存第一只是一样的。

基本类型的赋值

上面是对象类型的引用,当引用对象修改之后被引用对象也会被修改。那我们试试看基本类型会不会被修改!

let a = "我是a";
let b = a;
console.log(a, b);  // 我是a 我是a
b = "我是b,我变了";
console.log(a, b);  // 我是a 我是b,我变了
复制代码

输出结果是给b赋值了”我是b,我变了”之后,a并没有被修改。那我们看看内存发生了什么变化? 在内存页面我们再新建一个快照,结果如下:

Android Camera2 实现高帧率预览录制(附源码)

上一篇

失去的黄金时代,创业者熬过2020

下一篇

你也可能喜欢

javascript基本数据类型赋值和对象引用的内存情况分析

长按储存图像,分享给朋友