也许这样理解JavaScript连续赋值更加简单明了一些

本文通过实例详细解析了JavaScript中连续赋值的概念,包括基本数据类型与复合型数据的赋值区别,帮助读者理解复杂的赋值操作。

最近发现很多同学的博客里都会解释js连续赋值问题,各种概念辈出,特别是对于不理解的同学来说,更加一头雾水,我这里做个简单解释,也许不懂的一看就明白了。

先抛出一个问题:

var a = {c:1}         //第一步
var b = a;            //第二步
a.x = b.y = b = {c:2} //第三步
console.log(a)        // {c:1,x:{c:2},y:{c:2}}
console.log(b)        // {c:2}

第一步,第二步相信大家都很好理解,但是第三步是什么鬼,现实中基本上很难遇到,而且也不推荐这么写,好好的赋值不行么,干嘛要搞事情?对,话虽这么说,但是这毕竟是考验大家对赋值的理解嘛。在拆解以上问题的时候,大伙儿要先明白两个概念

1、引用数据细节

给一个变量赋值的时候,若“=”右侧是基本数据类型(Boolean String Number Null Undefined),就是真的“赋值”了;若“=”右侧是复合型数据(Array Object),则是数据的引用,也就是“指向”不一样而已

2、赋值数据可拆分成两步

例如:var d = 1 其实相当于 var d;d = 1;

理解以上两个概念后,我们以图示演示第一步、第二步执行完毕的结果
图片描述
执行到第二步是以上结果,相信不难理解。
然后我们再将第三步拆解为步骤甲、乙、丙

甲步骤:

a.x = undefined
b.y = undefined

图示
图片描述

乙步骤:

这个时候b的指向发生了变化

b = {c:2}

图示:
图片描述

丙步骤:

最后将b指向的内容分别赋值给a.x a.y。这个时候问题的难点就来了。不是b.y么,为毛变成a.y了? 逗我玩呢是不?我们往上看,步骤乙,这个时候a和b都是指向同一个内存地址,谁的x谁的y没有区别,大家是好兄弟,共用的。

a.x = {c:2}
a.y = {c:2}

图示:
图片描述

是不是很简单?如果你还是不理解,那么哥只能给你一个建议:吃饭睡觉上厕所,夜里别想妹子,只要脑袋是清醒的,就思考这个问题。不用两天,你肯定可以搞懂。
PS:还搞不懂咋整?还搞不懂你打我(打不到)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值