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 相关文章推荐
关于使用runtimeStyle属性问题讨论文章
Mar 08 Javascript
Packer 3.0 JS压缩及混淆工具 下载
May 03 Javascript
用js 让图片在 div或dl里 居中,底部对齐
Jan 21 Javascript
基于jQuery的试卷自动排版系统实现代码
Jan 06 Javascript
基于Jquery的$.cookie()实现跨越页面tabs导航实现代码
Mar 03 Javascript
基于jQuery替换table中的内容并显示进度条的代码
Aug 02 Javascript
为JavaScript类型增加方法的实现代码(增加功能)
Dec 29 Javascript
原生js做的手风琴效果的导航菜单
Nov 08 Javascript
分享一则JavaScript滚动条插件源码
Mar 03 Javascript
jQuery中$.grep() 过滤函数 数组过滤
Nov 22 Javascript
如何为vue的项目添加单元测试
Dec 19 Javascript
jquery+ajax实现上传图片并显示上传进度功能【附php后台接收】
Jun 06 jQuery
理解 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自动更新新闻DIY
2006/10/09 PHP
PHP面向对象之旅:深入理解static变量与方法
2014/01/06 PHP
php简单实现查询数据库返回json数据
2015/04/16 PHP
不懂JavaScript应该怎样学
2008/04/16 Javascript
JavaScript获得选中文本内容的方法
2008/12/02 Javascript
ExtJS的FieldSet的column列布局
2009/11/20 Javascript
js+css实现增加表单可用性之提示文字
2013/06/03 Javascript
nodejs教程之异步I/O
2014/11/21 NodeJs
AngularJS学习笔记之TodoMVC的分析
2015/02/22 Javascript
JavaScript实现向setTimeout执行代码传递参数的方法
2015/04/16 Javascript
javascript下拉列表菜单的实现方法
2015/11/18 Javascript
IE6-IE9使用JSON、table.innerHTML所引发的问题
2015/12/22 Javascript
JavaScript位移运算符(无符号) >>> 三个大于号 的使用方法详解
2016/03/31 Javascript
JavaScript requestAnimationFrame动画详解
2017/09/14 Javascript
使用 Node.js 模拟滑动拼图验证码操作的示例代码
2017/11/02 Javascript
使用DataTable插件实现异步加载数据
2017/11/19 Javascript
vue使用axios上传文件(FormData)的方法
2019/04/14 Javascript
微信小程序实现底部弹出框
2020/11/18 Javascript
vue 动态生成拓扑图的示例
2021/01/03 Vue.js
Python中字符串的处理技巧分享
2016/09/17 Python
Python 递归函数详解及实例
2016/12/27 Python
详谈Pandas中iloc和loc以及ix的区别
2018/06/08 Python
使用 Python 在京东上抢口罩的思路详解
2020/02/27 Python
django Layui界面点击弹出对话框并请求逻辑生成分页的动态表格实例
2020/05/12 Python
python能在浏览器能运行吗
2020/06/17 Python
表单button的outline在firefox浏览器下的问题
2012/12/24 HTML / CSS
HTML5 form标签之解放表单验证、增加文件上传、集成拖放的使用方法
2013/04/24 HTML / CSS
澳洲健康食品网上商店:Aussie Health Products
2018/06/15 全球购物
给水工程专业毕业生自荐信
2014/01/28 职场文书
金融事务专业毕业生求职信
2014/02/23 职场文书
个人校本研修方案
2014/05/26 职场文书
亲子运动会的活动方案
2014/08/17 职场文书
英语教育专业毕业生求职信
2014/08/28 职场文书
python实现图片批量压缩
2021/04/24 Python
Python+Tkinter制作专属图形化界面
2022/04/01 Python
配置nginx负载均衡
2022/05/06 Servers