摘要:最近发现很多同学的博客里都会解释连续赋值问题,各种概念辈出,特别是对于不理解的同学来说,更加一头雾水,我这里做个简单解释,也许不懂的一看就明白了。
最近发现很多同学的博客里都会解释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:还搞不懂咋整?还搞不懂你打我(打不到)
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/92758.html
摘要:本文章记录本人在深入学习条件表达式中看书理解到的一些东西,并且整理记录下来,加深记忆和方便之后的复习。表达式的值具有线性特征,如对连续的区间值进行判断。 本文章记录本人在深入学习js条件表达式中看书理解到的一些东西,并且整理记录下来,加深记忆和方便之后的复习。主要是深入学习if else和switch语句的一些性能优化和逻辑思维。 提高条件性能的策略 js的条件表达式和其他语言一样...
摘要:优点简单粗暴,直接调用缺点兼容性不太好,不过的话都支持你可能不知道的前端知识点对象和的方法。下面从深层次剖析一下对于开始的两个赋值语句,,,相当于,而显然等于。同理可以分析第三个赋值语句 有些东西很好用,但是你未必知道;有些东西你可能用过,但是你未必知道原理。 实现一个目的有多种途径,俗话说,条条大路通罗马。很多内容来自平时的一些收集以及过往博客文章底下的精彩评论,收集整理拓展一波,发...
摘要:优点简单粗暴,直接调用缺点兼容性不太好,不过的话都支持你可能不知道的前端知识点对象和的方法。下面从深层次剖析一下对于开始的两个赋值语句,,,相当于,而显然等于。同理可以分析第三个赋值语句 有些东西很好用,但是你未必知道;有些东西你可能用过,但是你未必知道原理。 实现一个目的有多种途径,俗话说,条条大路通罗马。很多内容来自平时的一些收集以及过往博客文章底下的精彩评论,收集整理拓展一波,发...
摘要:优点简单粗暴,直接调用缺点兼容性不太好,不过的话都支持你可能不知道的前端知识点对象和的方法。下面从深层次剖析一下对于开始的两个赋值语句,,,相当于,而显然等于。同理可以分析第三个赋值语句 有些东西很好用,但是你未必知道;有些东西你可能用过,但是你未必知道原理。 实现一个目的有多种途径,俗话说,条条大路通罗马。很多内容来自平时的一些收集以及过往博客文章底下的精彩评论,收集整理拓展一波,发...
阅读 6870·2021-09-22 15:08
阅读 1899·2021-08-24 10:03
阅读 2419·2021-08-20 09:36
阅读 1295·2020-12-03 17:22
阅读 2461·2019-08-30 15:55
阅读 833·2019-08-29 16:13
阅读 3039·2019-08-29 12:41
阅读 3225·2019-08-26 12:12