JavaScript的连续赋值的思考
下面是一个连续赋值的例子:
  
在这里面,先创建a对象并添加n:1,然后将a对象赋值给b,这时候a和b引用同一个对象。最后我们要着重理解这最后一行代码
a.x = a = {n:2};
按照我们平常的思维,应该是{n:2}赋值给 a,a的引用改变了,但b仍然是原来的引用,然后再赋值给a.x,这时候a是{n:2,x:{n:2}},也即是a.x={n:2}。但是,很显然我们的执行结果不是这样的,为什么会这样呢?
  其实这是调皮的运算优先级搞的鬼,a.x成员访问的优先级仅次于括号(),成员访问.访问的属性如果不存在就会被创建并且该成员访问表达式的值是undefined。这里的会先执行a.x,此时为a动态的创建了x属性,属性值默认为undefined,并且由于b引用和a同一个地址,所以也拥有b.x这个属性。然后开始赋值运算a={n:2},此时a的指向地址更改,注意这时候a.x(b.x)仍然是原先地址的属性,更改变引用地址的a已经没有关系了。然后是a.x={n:2},所以b.x={n:2},并且由于a指向的是新地址,当执行a.x的时候,a.x=undefined。
JavaScript的连续赋值的思考的更多相关文章
- 由闭包引起的对javascript代码可维护性的思考
		在最近的编程实践中由闭包的使用引起了我对javascript代码可维护性的思考.面向对象的其中一个特性封装性通过封装可以降低类与类之间或模块与模块之间耦合性从而使我们的设计更加高内聚低耦合,在大规模的 ... 
- JavaScript前端框架的思考
		(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:现在JavaScript前端框架层出不穷,尤其Angular进入到2.x时候之后,我们 ... 
- 一段奇葩Javascript代码引发的思考
		今天与一挚友加同事调试一段奇葩的javascript代码,在分析出结果后,让我萌生了写此篇文章的想法,如有不对之处望指正,也欢迎大家一起讨论.缩减后的js代码如下,你是否能准确说明他的输出值呢? fu ... 
- Javascript的"预编译"思考
		今天工作需要,搜索下JS面试题,看到一个题目,大约是这样的 <script> var x = 1, y = z = 0; function add(n) { n = n+1; } y = ... 
- 理解javascript中的连续赋值
		之前在扒源码时经常看到类似的连续赋值操作: var a = b = 1; 在某度搜了众多前辈的博客,总算对这骚操作有点眉目. Case analysis 首先,javascript中连续赋值最典型 ... 
- javascript this的一些误解
		太拘泥于"this"的字面意思就会产生一些误解.有两种常见的对于this 的解释,但是它们都是错误的. 1.指向自身 人们很容易把this 理解成指向函数自身,这个推断从英语的语法 ... 
- 为什么很多国内公司不使用 jQuery 等开源 JS 框架(库),而选择自己开发 JavaScript 框架?
		http://www.zhihu.com/question/20099586/answer/13971670 我对公司JAVASCRIPT框架的定位思考: 
- javascript 内存和连等赋值
		JavaScript深入之内存空间详细图解 https://juejin.im/post/5bf4c3eff265da613356348a 理解javascript中的连续赋值 https://www ... 
- JS探秘——那些你理解存在偏差的问题
		Javascript的连续赋值运算 var a = {n:1}; a.x = a = {n:2}; alert(a.x); // --> undefined 看 jQuery 源码 时发现的这种 ... 
随机推荐
- js原生设计模式——8单例模式之简约版属性样式方法库
			<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ... 
- 列表视图(ListView)和ListActivity
			ListView是手机系统中使用非常广泛的一种组件,它以垂直列表的形式显示所有列表项. 创建ListView有如下两种方式: 直接使用ListView进行创建. 让Activity继承ListActi ... 
- JSP userBean setProperty直接从request中获取参数
			JSP userBean setProperty直接从request中获取参数: form表单Jsp: <%@ page language="java" import=&qu ... 
- MalformedObjectNameException: Invalid character '' in value part of property
			http://blog.csdn.net/getdate/article/details/6729706 ojdbc6.jar的问题: 最近在项目中用spring配置oracle数据库连接池, 启动的 ... 
- java算法  蓝桥杯  乘法运算
			问题描述 编制一个乘法运算的程序. 从键盘读入2个100以内的正整数,进行乘法运算并以竖式输出. 输入格式 输入只有一行,是两个用空格隔开的数字,均在1~99之间(含1和99). 输出格式 输出为4行 ... 
- EntityFramework Core 1.1有哪些新特性呢?我们需要知道
			前言 在项目中用到EntityFramework Core都是现学现用,及时发现问题及时测试,私下利用休闲时间也会去学习其他未曾遇到过或者用过的特性,本节我们来讲讲在EntityFramework C ... 
- 《JAVASCRIPT高级程序设计》第五章(1)
			引用类型是一种将数据和功能组合到一起的数据结构,它与类相似,但是是不同的概念:ECMAScript虽然是一门面向对象的语言,但它不具备传统的面向对象语言所支持的类和结构等基本结构.引用类型也被称为“对 ... 
- Array数组常用的5个方法
			es6 时代来临了,不知道es5 你熟知了吗? 在此介绍一个我常用到的5个方法,万恶的ie9一下并不支持,需要做兼容慎用 indexOf indexOf()方法返回在该数组中第一个找到的元素位置,如果 ... 
- Thinkpad W540通过扩展坞连接显示器后蓝屏原因
			问题:Thinkpad W540通过扩展坞连接显示器后蓝屏 描述:直接扩展连接显示器重启电脑,一直黑屏,等待光标,进不了桌面.分离扩展,进入后,再连接显示器,蓝屏死机. 解决:用尽办法,重装显示驱动, ... 
- Socket.io+Nodejs通讯实例
			具体源码:Socket 目录结构 D:. │ package.json │ server.js │ └─public index.html socket.io.js 需要的条件 socket.io.j ... 
