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 相关文章推荐
js玩一玩WSH吧
Feb 23 Javascript
javascript数组使用调用方法汇总
Dec 08 Javascript
Prototype源码浅析 String部分(三)之HTML字符串处理
Jan 15 Javascript
jQuery(js)获取文字宽度(显示长度)示例代码
Dec 31 Javascript
详解AngularJS中的filter过滤器用法
Jan 04 Javascript
JavaScript判断用户名和密码不能为空的实现代码
May 16 Javascript
详解Vue中一种简易路由传参办法
Sep 15 Javascript
jquery层次选择器的介绍
Jan 18 jQuery
vue项目首屏打开速度慢的解决方法
Mar 31 Javascript
微信小程序基于Taro的分享图片功能实践详解
Jul 12 Javascript
Elasticsearch实现复合查询高亮结果功能
Sep 10 Javascript
JavaScript碰撞检测原理及其实现代码
Mar 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
中国第一家无线电行
2021/03/01 无线电
php异常处理技术,顶级异常处理器
2012/06/13 PHP
php中的比较运算符详解
2013/10/28 PHP
php提交过来的数据生成为txt文件
2016/04/28 PHP
flash javascript之间的通讯方法小结
2008/12/20 Javascript
js 实现无缝滚动 兼容IE和FF
2009/07/15 Javascript
自制轻量级仿jQuery.boxy对话框插件代码
2010/10/26 Javascript
元素的内联事件处理函数的特殊作用域在各浏览器中存在差异
2011/01/12 Javascript
jquery 结合C#后台的数组对文章的关键字自动添加链接的代码
2011/07/15 Javascript
jquery prop的使用介绍及与attr的区别
2013/12/19 Javascript
jquery实现动静态条形统计图
2015/08/17 Javascript
跟我学习javascript的call(),apply(),bind()与回调
2015/11/16 Javascript
JavaScript实现身份证验证代码
2016/02/17 Javascript
Javascript基础回顾之(三) js面向对象
2017/01/31 Javascript
详解在Angularjs中ui-sref和$state.go如何传递参数
2017/04/24 Javascript
jQuery NProgress.js加载进度插件的简单使用方法
2018/01/31 jQuery
如何制作一个Node命令行图像识别工具
2018/12/12 Javascript
Nuxt的路由动画效果案例
2020/11/06 Javascript
重命名批处理python脚本
2013/04/05 Python
Python实现模拟时钟代码推荐
2015/11/08 Python
深入理解Django的自定义过滤器
2017/10/17 Python
python实现requests发送/上传多个文件的示例
2018/06/04 Python
Django基础知识与基本应用入门教程
2018/07/20 Python
详解python之heapq模块及排序操作
2019/04/04 Python
浅谈Python3中strip()、lstrip()、rstrip()用法详解
2019/04/29 Python
Python编写打字训练小程序
2019/09/26 Python
Python基于Dlib的人脸识别系统的实现
2020/02/26 Python
Python标准库json模块和pickle模块使用详解
2020/03/10 Python
解决python和pycharm安装gmpy2 出现ERROR的问题
2020/08/28 Python
浅谈h5自定义audio(问题及解决)
2016/08/19 HTML / CSS
大学生农村教师实习自我鉴定
2013/09/21 职场文书
夜大毕业生自我鉴定
2013/10/31 职场文书
就业协议书
2014/09/12 职场文书
优秀班组申报材料
2014/12/25 职场文书
2015年教研组工作总结
2015/05/04 职场文书
微信小程序和php的登录实现
2021/04/01 PHP