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 相关文章推荐
JScript内置对象Array中元素的删除方法
Mar 08 Javascript
Dom加载让图片加载完再执行的脚本代码
May 15 Javascript
JS中令人发指的valueOf方法介绍
Feb 22 Javascript
window.event.keyCode兼容IE和Firefox实现js代码
May 30 Javascript
seajs中模块的解析规则详解和模块使用总结
Mar 12 Javascript
JS正则表达式比较常见用法
Jan 26 Javascript
jQuery实现横向带缓冲的水平运动效果(附demo源码下载)
Jan 29 Javascript
把普通对象转换成json格式的对象的简单实例
Jul 04 Javascript
前端开发之CSS原理详解
Mar 11 Javascript
js用类封装pop弹窗组件
Oct 08 Javascript
vue中倒计时组件的实例代码
Jul 06 Javascript
vue实现前端列表多条件筛选
Oct 26 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魔术方法与魔术变量、内置方法与内置变量的深入分析
2013/06/03 PHP
php GUID生成函数和类
2014/03/10 PHP
CI(CodeIgniter)框架中的增删改查操作
2014/06/10 PHP
php字符串截取函数用法分析
2014/11/25 PHP
php+ajax实现带进度条的上传图片功能【附demo源码下载】
2016/09/14 PHP
PHP下的浮点运算不准的解决方法
2016/10/27 PHP
基于laravel Request的所有方法详解
2019/09/29 PHP
javascript 文档的编码问题解决
2009/03/01 Javascript
JavaScript设置FieldSet展开与收缩
2009/05/15 Javascript
javascript学习笔记(十) js对象 继承
2012/06/19 Javascript
Jquery 实现table样式的设定
2015/01/28 Javascript
jquery实现简单的轮换出现效果实例
2015/07/23 Javascript
基于dataset的使用和图片延时加载的实现方法
2017/12/11 Javascript
Python的ORM框架SQLAlchemy入门教程
2014/04/28 Python
使用C语言来扩展Python程序和Zope服务器的教程
2015/04/14 Python
Python实现基于二叉树存储结构的堆排序算法示例
2017/12/08 Python
Windows环境下python环境安装使用图文教程
2018/03/13 Python
详解Python字典的操作
2019/03/04 Python
python下的opencv画矩形和文字注释的实现方法
2019/07/09 Python
django做form表单的数据验证过程详解
2019/07/26 Python
python 字符串常用方法汇总详解
2019/09/16 Python
python实现代码统计程序
2019/09/19 Python
Django单元测试中Fixtures用法详解
2020/02/25 Python
在ipython notebook中使用argparse方式
2020/04/20 Python
图解Python中深浅copy(通俗易懂)
2020/09/03 Python
详解Python yaml模块
2020/09/23 Python
python抢购软件/插件/脚本附完整源码
2021/03/04 Python
JAVA招聘远程笔试题
2015/07/23 面试题
跟单文员的岗位职责
2013/11/14 职场文书
创新比赛获奖感言
2014/02/13 职场文书
食品销售计划书
2014/04/26 职场文书
无犯罪记录证明范本
2014/09/15 职场文书
优秀教师推荐材料
2014/12/16 职场文书
小学教师工作总结2015
2015/04/07 职场文书
教师节随笔
2015/08/15 职场文书
HTML速写之Emmet语法规则的实现
2021/04/07 HTML / CSS