JS连等赋值

本文通过具体案例,详细解析了JavaScript中对象赋值的过程及原理,重点分析了对象赋值时的引用特性及其带来的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1)案例分析:先理解,将某一变量赋值为数组、对象、对象数组的时候,该变量实际上只是一个傀儡,是数组、对象、对象数组的引用
var a={n:1};//定义变量a,将(一个属性为n,属性值为1的对象{n:1})赋值给a,假设(这个属性为n,属性值为1的对象{n:1}),存储的地址为address_1
var b=a;//定义变量b,指向变量a,实际上此时,变量a、b均指向存储地址address_1
a.x=a={n:10086};
//此处拆开看,并且需要理解"="等号为右赋值
//1、变量a新增定义一个属性x,该属性x的值被右赋值(第一个"="等号)为a,也就是赋值为{n:1},即此时的变量a指向的值为:{n:1,x:{n:1}},同样也就是说存储地址address_1上存储的对象变为:{n:1,x:{n:1}},由于b在a.x=a={n:10086};代码执行之前,被定义为指向存储地址address_1,因此此时b指向的值为存储地址address_1上存储的对象{n:1,x:{n:1}}
//2、接下来第二个"="等号,a.x被重新赋值为{n:10086},依据1、的分析,此时的变量a指向的值为:{n:1,x:{n:10086}},同样也是存储地址address_1上存储的对象变为:{n:1,x:{n:10086}},变量b指向该存储地址address_1,其值为:{n:1,x:{n:10086}}
//3、a.x赋值完毕之后,a={n:10086},也就是说变量a重写指向另(一个属性为n,属性值为10086的对象{n:10086}),而(这个属性为n,属性值为10086的对象{n:10086}存储的地址为address_2),也就是此时a已经被重写指向address_2地址上存储的对象{n:10086},b则仍然指向address_1地址上存储的对象{n:1,x:{n:10086}},所以a.x为undefined,b.x为{n:10086}
alert(a.x);//undefined
alert(b.x);//{n:10086}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值