好多同学在工作中会遇到关于数组赋值的问题,比如循环数组a去操作a的值,却发现b的值也被修改了,很困惑,不明白为什么,下面大概讲一下我的理解,希望能够对大家有所帮助。
// 声明a,给a赋初始值,这个时候会在内存中给a分配一段空间,内容是a的值对应的内存空间的指针
var a = [
{
key: 2,
value: '1'
}
];
// 声明b,把a赋值给b,这个时候会在内存中给b也分配一段空间,保存的内容跟a的一样,也是a的值对应的那段内存空间的指针
var b = a;
// 更改a的值,这个时候打印出来b也会跟着变动,因为a和b指向同一个值
a[0].key = 2; // 或者a.push或者a.splice
console.log(JSON.stringify(b));
// 控制台打印结果为:
// [
// {
// key: 2,
// value: '1'
// }
// ]
// 给a重新赋值,内存会给新的值分配一段空间,这个时候变量a的那段内存空间里存的值就变成了新的值对应的空间的指针,而变量b指向的还是旧值对应空间的指针,所以这时候打印出来b不变,至此变量a和变量b其实就没关系了
a = [
{
id: 1,
name: '1'
}
];
console.log(JSON.stringify(b));
// 控制台打印出来的结果:
// [
// {
// key: 2,
// value: '1'
// }
// ]
放一张示意图,希望能更清晰。
以上
如有不对,欢迎斧正!联系方式:whh2285388328@163.com