系统相关
首页 > 系统相关> > 内存概念:栈, 堆和深浅拷贝及复杂对象的深拷贝的实现

内存概念:栈, 堆和深浅拷贝及复杂对象的深拷贝的实现

作者:互联网

内存概念

JS数据类型

数据创建过程

简单数据创建的过程
复杂数据类型创建过程:

深浅拷贝:

Q:一个简单数据类型之间相互赋值,修改了其中一个变量的值,另一个变量的值是否会变?
A:不会改变,简单数据类型是保存在栈中的,数据的复制是直接单独将一个变量的值复制了一份给了另一个变量,相互之间是没有关联的,修改了其中一个变量的值,另一个不会受到影响.

从这里也可以理解为,简单数据类型的复制默认就是深拷贝,也可以从这里来解释为什么操作字符串的API为什么都不会改变原字符串,字符串的恒定性

let a = 12;
let b = a;
console.log(a, b);// 12 12
b = 23;
console.log(a, b);// 12 23

Q:一个复杂数据类型之间相互赋值,修改了其中一个变量的值,另一个变量的值是否会变?
A:复杂数据类型在栈中保存的是堆中内存对应的一个地址,复杂数据的变量相互复制其实是栈中的地址的复制,其实对应的堆中的数据是同一份的,所以如果复杂数据类型相互复制后,修改了其中的一个变量的值,那另一个变量的值也是会变化的

let c = {
    name:'小明',
    age:12
}
let d = c;
c.name = '小红'
console.log(c, d); //{name:'小红',age:12}   {name:'小红',age:12}

复杂数据类型默认是浅拷贝的,如果想实现深拷贝就要使用遍历

说明:先更新到这里,后面补全分享内容

标签:12,变量,复杂,一个,数据类型,深浅,内存,拷贝
来源: https://blog.csdn.net/weixin_45634433/article/details/118882363