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 相关文章推荐
jQuery中绑定事件的命名空间详解
Apr 05 Javascript
Extjs4 关于Store的一些操作(加载/回调/添加)
Apr 18 Javascript
js实现的切换面板实例代码
Jun 17 Javascript
JS求平均值的小例子
Nov 29 Javascript
一个JavaScript去除字符串末尾的空白实例代码
Sep 22 Javascript
jQuery关键词说明插件cluetip使用指南
Apr 21 Javascript
微信JSSDK上传图片
Aug 23 Javascript
AngularJs bootstrap详解及示例代码
Sep 01 Javascript
jQuery实现字符串全部替换的方法
Dec 12 Javascript
jQuery实现获取及设置CSS样式操作详解
Sep 05 jQuery
开发用到的js封装方法(20种)
Oct 12 Javascript
修改Vue打包后的默认文件名操作
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 常见郁闷问题答解
2006/11/25 PHP
MySql 按时间段查询数据方法(实例说明)
2008/11/02 PHP
php去除重复字的实现代码
2011/09/16 PHP
PHP APC缓存配置、使用详解
2014/03/06 PHP
php实现建立多层级目录的方法
2014/07/19 PHP
php利用imagemagick实现复古老照片效果实例
2017/02/16 PHP
javascript操作文本框readOnly
2007/05/15 Javascript
通过隐藏option实现select的联动效果
2009/11/10 Javascript
JS 排序输出实现table行号自增前端动态生成的tr
2014/08/13 Javascript
JavaScript中的Promise使用详解
2015/06/24 Javascript
jQuery EasyUI实现右键菜单变灰不可用效果
2015/09/24 Javascript
使用JavaScript实现ajax的实例代码
2016/05/11 Javascript
微信小程序 登录的简单实现
2017/04/19 Javascript
详解Require.js与Sea.js的区别
2018/08/05 Javascript
mui js控制开关状态、修改switch开关的值方法
2019/09/03 Javascript
微信小程序淘宝首页双排图片布局排版代码(推荐)
2020/10/29 Javascript
es5 类与es6中class的区别小结
2020/11/09 Javascript
vue如何使用rem适配
2021/02/06 Vue.js
[01:37]全新的一集《真视界》——TI7总决赛
2017/09/21 DOTA
python中常用的各种数据库操作模块和连接实例
2014/05/29 Python
python基于http下载视频或音频
2018/06/20 Python
Python实现的调用C语言函数功能简单实例
2019/03/13 Python
Python使用到第三方库PyMuPDF图片与pdf相互转换
2019/05/03 Python
解决python 找不到module的问题
2020/02/12 Python
python实现猜数游戏(保存游戏记录)
2020/06/22 Python
如果有两个类A,B,怎么样才能使A在发生一个事件的时候通知B
2016/03/12 面试题
便利店的创业计划书
2014/01/15 职场文书
社团2014年植树节活动总结
2014/03/11 职场文书
2015元旦标语横幅
2014/12/09 职场文书
鸟的天堂导游词
2015/01/31 职场文书
个人专业技术总结
2015/03/05 职场文书
2016应届毕业生实习评语
2015/12/01 职场文书
2016春季幼儿园小班开学寄语
2015/12/03 职场文书
导游词之山东红叶谷
2019/10/31 职场文书
浅谈Python数学建模之线性规划
2021/06/23 Python
JS函数式编程实现XDM一
2022/06/16 Javascript