js中变量的连续赋值(实例讲解)


Posted in Javascript onJuly 08, 2017

今天遇到了一个连续赋值的经典案例,网友们给出的答案也是五花八门,看起来有些繁琐,我也来说说自己的看法。

下面就是这个经典案例:

var a = {n: 1};
var b = a;
a.x = a = {n: 2};

console.log(a);
console.log(b);
console.log(a.x);
console.log(b.x);

我们先来看一下普通连续赋值,即:变量赋值的类型是数据类型值

var a=3;
var b=a=5;
console.log(a);
console.log(b);

一般来说,等号赋值的方向是从右至左,那么上面的代码等同于下面这段代码,那么我们就用下面这段代码来解释上面的代码:

var a=3;//全局变量a被赋值为3
var a=5;
//此时a被重新赋值为5
var b=a;
//将a的值赋给全局变量b
console.log(a);//a最终的值就是第二次被赋的值:5
console.log(b);//按照代码执行顺序b的值也是:5

上面的小案例用来抛砖引玉,现在我们来分析这个经典案例:

var a = {n: 1};//a第一次被赋值,是一个引用类型值,请记得变量赋值为引用类型值的时候,通过变量改变这个对象的时候,对象本身也发生了变化
var b = a;//b被赋值为a,因此b就是对象{n:1}

a.x = a = {n: 2};
//这个赋值与之前的简单案例有所不同,a.x指的是给a添加一个x属性,在js的运算中“.”和"="运算符同时出现,会先执行"."运算
//因此,赋值顺序被改变了,是先给a.x赋值,再给a赋值
//就是先执行:a.x={n:2},注意这里a并未改变,是给a的x属性赋值为{n:2},a还是{n:1}
//再回到我代码中的第一句话,这个赋值行为,改变了{n:1}这个对象,即给它增加了名为x的属性
//再执行a={n:2},这是变量a不再是对象{n:1},而被重新赋值为一个新的对象{n:2};

console.log(a);//自然此时a是对象{n:2}
console.log(b);//a的二次赋值,并没有影响b,b还是对象{n:1},但是由于a在重新赋值之前,给{n:1}这个对象,增加了一个x属性,因此,这时的b已经有了x属性
console.log(a.x);//{n:2}对象没有x属性,所以结果是undefined
console.log(b.x);//综上所述,这个结果是{n:2}

以上这篇js中变量的连续赋值(实例讲解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript smipleChart 简单图标类
Jan 12 Javascript
jQuery层动画定位滑动效果的方法
Apr 30 Javascript
jquery.validate使用时遇到的问题
May 25 Javascript
浅谈node的事件机制
Oct 09 Javascript
详解微信小程序canvas圆角矩形的绘制的方法
Aug 22 Javascript
解决vue打包css文件中背景图片的路径问题
Sep 03 Javascript
vue 移动端适配方案详解
Nov 15 Javascript
在 Vue-CLI 中引入 simple-mock实现简易的 API Mock 接口数据模拟
Nov 28 Javascript
JS实现简单的文字无缝上下滚动功能示例
Jun 22 Javascript
JavaScript实现背景自动切换小案例
Sep 27 Javascript
JavaScript对象原型链原理解析
Jan 22 Javascript
VUE 实现element upload上传图片到阿里云
Aug 12 Javascript
理解 javascript 中的函数表达式与函数声明
Jul 07 #Javascript
彻底解决 webpack 打包文件体积过大问题
Jul 07 #Javascript
JS仿QQ好友列表展开、收缩功能(第一篇)
Jul 07 #Javascript
JS仿QQ好友列表展开、收缩功能(第二篇)
Jul 07 #Javascript
JS实现发送短信验证后按钮倒计时功能(防止刷新倒计时失效)
Jul 07 #Javascript
详解vue.js+UEditor集成 [前后端分离项目]
Jul 07 #Javascript
JS实现搜索关键词的智能提示功能
Jul 07 #Javascript
You might like
PHP中文分词 自动获取关键词介绍
2012/11/13 PHP
PHP中::、->、self、$this几种操作符的区别介绍
2013/04/24 PHP
一些php项目中比较通用的php自建函数的详解
2013/06/06 PHP
键盘 keycode的值 javascript时触发事件时很有用的要素
2009/11/02 Javascript
方便实用的jQuery checkbox复选框全选功能简单实例
2013/10/09 Javascript
javascript替换已有元素replaceChild()使用介绍
2014/04/03 Javascript
swtich/if...else的替代语句
2015/08/16 Javascript
z-blog SyntaxHighlighter 长代码无法换行解决办法(基于jquery)
2015/11/18 Javascript
JavaScript获取当前cpu使用率的方法
2015/12/15 Javascript
js实现input密码框提示信息的方法(附html5实现方法)
2016/01/14 Javascript
jquery 动态增加,减少input表单的简单方法(必看)
2016/10/12 Javascript
JS中用try catch对代码运行的性能影响分析
2016/12/26 Javascript
React Native使用Modal自定义分享界面的示例代码
2017/10/31 Javascript
详解vue-meta如何让你更优雅的管理头部标签
2018/01/18 Javascript
JavaScript数据结构与算法之二叉树遍历算法详解【先序、中序、后序】
2019/02/21 Javascript
原生js实现each方法实例代码详解
2019/05/27 Javascript
javascript实现倒计时效果
2020/02/17 Javascript
如何在Vue中使localStorage具有响应式(思想实验)
2020/07/14 Javascript
50行代码实现贪吃蛇(具体思路及代码)
2013/04/27 Python
Python文件夹与文件的操作实现代码
2014/07/13 Python
Python 3.7新功能之dataclass装饰器详解
2018/04/21 Python
Python实现获取本地及远程图片大小的方法示例
2018/07/21 Python
Python 实现交换矩阵的行示例
2019/06/26 Python
应用OpenCV和Python进行SIFT算法的实现详解
2019/08/21 Python
python数组循环处理方法
2019/08/26 Python
Python字典底层实现原理详解
2019/12/18 Python
澳大利亚第一旅行车和房车配件店:Caravan RV Camping
2020/12/26 全球购物
班主任工作年限证明
2014/01/12 职场文书
本科毕业生求职自荐信
2014/02/03 职场文书
报表员工作失误检讨书范文
2014/09/19 职场文书
大一新生检讨书
2014/10/29 职场文书
给老婆的检讨书1000字
2015/01/01 职场文书
上级领导检查欢迎词
2015/09/30 职场文书
初中政治教学反思
2016/02/23 职场文书
网络新闻该怎么写?这些写作技巧你都知道吗?
2019/08/26 职场文书
html5表单的required属性使用
2021/07/07 HTML / CSS