问题描述:spa
1 var a = {n: 1}; 2 var b = a; 3 a.x = a = {n: 2}; 4 console.log(a.x); 5 console.log(b); 6 输出什么
错误分析:
直觉性的判断a.x={n,2};b={n:2,x:object};指针
写了JS示例,在火狐中经过F12调用控制台面板获得如下输出:code
错误缘由有两点:对象
理解了引用类型变量的复制状况,没有理解引用类型变量做为指针实质,赋值时的使用。blog
操做符的优先级知识混乱。console
正确解题思路:class
首先了解,引用类型Object:变量
其次关于操做符的有限性:object
在了解到这两点后,开始分析题目的处理过程:引用
1 var a = {n: 1}; //将a指向对象{n:1} 2 var b = a; //引用类型变量复制,b也指向对象{n:1} 3 a.x = a = {n: 2}; //按照操做符优先级处理a.x,即添加a所指对象的属性x,对象修改成{n:1,x:undefined} 4 //再按照自右向左的顺序赋值,先引用类型a从新指向新对象{n:2},
//后从变量a向变量a.x赋值引用类型,指向同一个对象{n:2} 5 console.log(a.x); //a没有x属性,undefined 6 console.log(b); //b指向对象{n:1,x:Object}
附变量关系图: