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动态增减控件的一些想法和小插件
Aug 01 Javascript
5个最佳的Javascript日期处理类库分享
Apr 15 Javascript
table insertRow、deleteRow定义和用法总结
May 14 Javascript
IE下支持文本框和密码框placeholder效果的JQuery插件分享
Jan 31 Javascript
javascript表单正则应用
Feb 04 Javascript
AngularJS路由删除#符号解决的办法
Sep 28 Javascript
微信小程序富文本渲染引擎的详解
Sep 30 Javascript
VUE长按事件需求详解
Oct 18 Javascript
jQuery easyui datagird编辑行删除行功能的实现代码
Sep 20 jQuery
vue更改数组中的值实例代码详解
Feb 07 Javascript
ant-design-vue 时间选择器赋值默认时间的操作
Oct 27 Javascript
javascript中导出与导入实现模块化管理教程
Dec 03 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&java(一)
2006/10/09 PHP
php iconv() : Detected an illegal character in input string
2010/12/05 PHP
php中通过虚代理实现延迟加载的实现代码
2011/06/10 PHP
与文件上传有关的php配置参数总结
2013/06/14 PHP
5款适合PHP使用的HTML编辑器推荐
2015/07/03 PHP
PHP+Mysql基于事务处理实现转账功能的方法
2015/07/08 PHP
yii2实现 "上一篇,下一篇" 功能的代码实例
2017/02/04 PHP
转一个日期输入控件,支持FF
2007/04/27 Javascript
深入理解javascript的执行顺序
2014/04/04 Javascript
原生js页面滚动延迟加载图片
2015/12/20 Javascript
谈一谈bootstrap响应式布局
2016/05/23 Javascript
总结AngularJS开发者最常犯的十个错误
2016/08/31 Javascript
js图片切换具体实现代码
2016/10/13 Javascript
JS常用算法实现代码
2016/11/14 Javascript
jQuery插件zTree实现的基本树与节点获取操作示例
2017/03/08 Javascript
关于vue-router的beforeEach无限循环的问题解决
2017/09/09 Javascript
微信小程序实现漂亮的弹窗效果
2020/05/26 Javascript
js尾调用优化的实现
2019/05/23 Javascript
浅析微信小程序modal弹窗关闭默认会执行cancel问题
2019/10/14 Javascript
Nuxt 嵌套路由nuxt-child组件用法(父子页面组件的传值)
2020/11/05 Javascript
python爬虫_自动获取seebug的poc实例
2017/08/05 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧(自定义信号与槽)详解与实例
2020/03/06 Python
Python批量处理csv并保存过程解析
2020/05/16 Python
在Pytorch中使用Mask R-CNN进行实例分割操作
2020/06/24 Python
Python 实现国产SM3加密算法的示例代码
2020/09/21 Python
西班牙多品牌鞋店连锁店:Krack
2018/11/30 全球购物
可以在一个PHP文件里面include另外一个PHP文件两次吗
2015/05/22 面试题
大学生学业生涯规划
2014/01/05 职场文书
幼儿园庆六一游园活动方案
2014/01/29 职场文书
幼儿园庆六一活动方案
2014/03/06 职场文书
授权委托书
2014/09/17 职场文书
乡镇党的群众路线教育实践活动制度建设计划
2014/11/03 职场文书
2014年保险业务员工作总结
2014/12/23 职场文书
工程质量保证书
2015/05/09 职场文书
2015年依法治校工作总结
2015/07/27 职场文书
一文弄懂MySQL索引创建原则
2022/02/28 MySQL