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 相关文章推荐
原生javascript兼容性测试实例
Jul 01 Javascript
Js 去掉字符串中的空格(实现代码)
Nov 19 Javascript
详解JavaScript基于面向对象之继承
Dec 13 Javascript
javascript创建cookie、读取cookie
Mar 31 Javascript
js实现统计字符串中特定字符出现个数的方法
Aug 02 Javascript
JavaScript 详解预编译原理
Jan 22 Javascript
Vuex之理解Store的用法
Apr 19 Javascript
jquery submit()不能提交表单的解决方法
Apr 24 jQuery
JavaScript canvas实现围绕旋转动画
Nov 18 Javascript
详解react阻止无效重渲染的多种方式
Dec 11 Javascript
解决Layui 表格自适应高度的问题
Nov 15 Javascript
Jquery cookie插件实现原理代码解析
Aug 04 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 上传文件大小限制
2009/07/05 PHP
php实现首页链接查询 友情链接检查的代码
2010/01/05 PHP
PHP获取文件绝对路径的代码(上一级目录)
2011/05/29 PHP
MongoDB在PHP中的常用操作小结
2014/02/20 PHP
Thinkphp中数据按分类嵌套循环实现方法
2014/10/30 PHP
javascript 写类方式之二
2009/07/05 Javascript
防止动态加载JavaScript引起的内存泄漏问题
2009/10/08 Javascript
jQuery 获取对象 基本选择与层级
2010/05/31 Javascript
关于jQuery object and DOM element
2013/04/15 Javascript
jquery修改网页背景颜色通过css方法实现
2014/06/06 Javascript
JavaScript的React框架中的JSX语法学习入门教程
2016/03/05 Javascript
nodejs连接mysql数据库简单封装示例-mysql模块
2017/04/10 NodeJs
使用json-server简单完成CRUD模拟后台数据的方法
2018/07/12 Javascript
jQuery easyui datagird编辑行删除行功能的实现代码
2018/09/20 jQuery
Vue CLI 3搭建vue+vuex最全分析(推荐)
2018/09/27 Javascript
vue.js购物车添加商品组件的方法
2019/09/17 Javascript
微信小程序后端无法保持session的原因及解决办法问题
2020/03/20 Javascript
vue组件中节流函数的失效的原因和解决方法
2020/12/02 Vue.js
简单使用Python自动生成文章
2014/12/25 Python
Python使用BeautifulSoup库解析HTML基本使用教程
2016/03/31 Python
python中利用Future对象回调别的函数示例代码
2017/09/07 Python
Django 连接sql server数据库的方法
2018/06/30 Python
Python pyinotify模块实现对文档的实时监控功能方法
2018/10/13 Python
Python多线程模块Threading用法示例小结
2019/11/09 Python
python入门教程之基本算术运算符
2020/11/13 Python
Python系统公网私网流量监控实现流程
2020/11/23 Python
Python环境搭建过程从安装到Hello World
2021/02/05 Python
李维斯德国官方网上商店:Levi’s德国
2016/09/10 全球购物
Europcar意大利:汽车租赁
2019/07/07 全球购物
四种会话跟踪技术
2015/05/20 面试题
专业毕业生个性的自我评价
2013/10/03 职场文书
机械设计制造及其自动化专业求职信
2014/06/17 职场文书
2014年残疾人工作总结
2014/12/06 职场文书
淮海战役观后感
2015/06/11 职场文书
解决Windows Server2012 R2 无法安装 .NET Framework 3.5
2022/04/29 Servers