听说你会对象
var a = {n: 1} var b = a; a.x = a = {n: 2} console.log(a.x); console.log(b.x);
什么结果,,解释一下
6 回复
这个是数组?
你要这样问,我肯定说我不会
@T-Roc 不好意思写错了
和对象无关,我理解为对连等的解析和运算优先级,核心是 . 优先于 = 和 连等从右到左运行且等式左边的引用确定于运行前
a.x = a = {n: 2}
- 首先有a.x,最先运行,没有a.x, 创建一个
a.x
指向undefined先,此时a === b === {n:1, x:undefined} - 从右到左运行,
a = {n:2}
把a的引用指向一个新对象{n:2} , 此时 新a === {n:2}, b === {n:1, x:undefined} === 旧a - a.x = [Object](===新a), 注意此时左边a.x中的a还是旧a, 此时 a === {n:2}, b=== {n:1, x: [Object]}
等这行运行完了,现在a的指向是{n:2} ,b仍指向是有了新属性x的旧a,也就是{n:1,x:Object}
这样写程序是作死,作为题目还是可以一看的…浓浓的谭浩强风…错就错在容易忽略a.x优先级高这点