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}
复杂数据类型默认是浅拷贝的,如果想实现深拷贝就要使用遍历
说明:先更新到这里,后面补全分享内容