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 表单之间的数据传递代码
Dec 04 Javascript
js函数参数设置默认值的一种变通实现方法
May 26 Javascript
jQuery中hover方法和toggle方法使用指南
Feb 27 Javascript
Bootstrap的图片轮播示例代码
Aug 31 Javascript
javascript图片切换综合实例(循环切换、顺序切换)
Jan 13 Javascript
jquery实现全选、不选、反选的两种方法
Sep 06 Javascript
最原始的jQuery注册验证方式
Oct 11 Javascript
vue移动端裁剪图片结合插件Cropper的使用实例代码
Jul 10 Javascript
JavaScript实现的浏览器下载文件的方法
Aug 09 Javascript
移动端效果之IndexList详解
Oct 20 Javascript
js数组相减简单示例【删除a数组所有与b数组相同元素】
Mar 04 Javascript
如何手动实现一个 JavaScript 模块执行器
Oct 16 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服务器实现多session并发运行
2006/10/09 PHP
php foreach、while性能比较
2009/10/15 PHP
解析PHP中如何将数组变量写入文件
2013/06/06 PHP
Apache实现Web Server负载均衡详解(不考虑Session版)
2013/07/05 PHP
php定时执行任务设置详解
2015/02/06 PHP
PHP程序员必须知道的两种日志实例分析
2020/05/14 PHP
[对联广告] JS脚本类
2006/08/27 Javascript
javascript new一个对象的实质
2010/01/07 Javascript
javascript修改表格背景色实例代码分享
2013/12/10 Javascript
node.js中的console.info方法使用说明
2014/12/09 Javascript
javascript实现dom元素可拖动
2016/03/21 Javascript
深入剖析JavaScript:Object类型
2016/05/10 Javascript
jQuery购物车插件jsorder用法(支持后台处理程序直接转换成DataTable处理)
2016/06/08 Javascript
JavaScript日期对象(Date)基本用法示例
2017/01/18 Javascript
纯js实现页面返回顶部的动画(超简单)
2017/08/10 Javascript
基于jquery trigger函数无法触发a标签的两种解决方法
2018/01/06 jQuery
Vue开发中遇到的跨域问题及解决方法
2020/02/11 Javascript
Vue使用Proxy代理后仍无法生效的解决
2020/11/13 Javascript
Python中编写ORM框架的入门指引
2015/04/29 Python
浅谈五大Python Web框架
2017/03/20 Python
python3 模拟登录v2ex实例讲解
2017/07/13 Python
Python实用技巧之列表、字典、集合中根据条件筛选数据详解
2018/07/11 Python
Python unittest 简单实现参数化的方法
2018/11/30 Python
完美解决Python matplotlib绘图时汉字显示不正常的问题
2019/01/29 Python
python2 中 unicode 和 str 之间的转换及与python3 str 的区别
2019/07/25 Python
使用Pyhton集合set()实现成果查漏的例子
2019/11/24 Python
python列表推导式入门学习解析
2019/12/02 Python
python numpy数组中的复制知识解析
2020/02/03 Python
基于pycharm 项目和项目文件命名规则的介绍
2021/01/15 Python
Farfetch中文官网:奢侈品牌时尚购物平台
2020/03/15 全球购物
Johnson Fitness澳大利亚:高级健身器材
2021/03/16 全球购物
酒后驾驶检讨书
2014/01/27 职场文书
学校元旦晚会方案
2014/02/19 职场文书
搞笑的获奖感言
2014/08/16 职场文书
中学生自我评价2015
2015/03/03 职场文书
python区块链持久化和命令行接口实现简版
2022/05/25 Python