JS连等运算符与取值运算符

var a = { n: 1 };
var b = a;
a.x = a = { n: 2 };
console.log(a.x);
console.log(b.x);
// undefined
// { n: 2}

赋值运算符 = 和 成员访问运算符 . 两个运算符
在上面的代码中,我们很容易忽视一个运算符:成员访问运算符. 。它的优先级为:19,仅仅比圆括号运算符()的优先级:20低,而赋值运算符=的优先级为:3
所以运行过程是
1.先获取对象A的属性x等待后面运算结果赋值
2.a={n:2}将变量a改为指向{n:2}(我们且成为对象B)
3.给对象A的x属性赋值,即指向对象B:{n:2}
运行下来
b还是指向对象A:{n:1,x:{n:2}}
a指向对象B:{n:2}
所以
a.x为undefined
b.x为{n:2}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容