数组互相赋值内存的变化

好多同学在工作中会遇到关于数组赋值的问题,比如循环数组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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值