CNode

听说你会对象

问答
Zzhang14725804发布于9 年前最后回复9 年前6 回复4986 浏览0 收藏

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

什么结果,,解释一下

查看回复

回复 (6)

T
T-Roc#1·9 年前

这个是数组?

U
unliar#2·9 年前

你要这样问,我肯定说我不会

Z
zhang14725804#4·9 年前
引用 T-Roc这个是数组?

@T-Roc 不好意思写错了

W
w10036w#5·9 年前

和对象无关,我理解为对连等的解析和运算优先级,核心是 . 优先于 =连等从右到左运行且等式左边的引用确定于运行前 a.x = a = {n: 2}

  1. 首先有a.x,最先运行,没有a.x, 创建一个a.x 指向undefined先,此时a === b === {n:1, x:undefined}
  2. 从右到左运行,a = {n:2} 把a的引用指向一个新对象{n:2} , 此时 新a === {n:2}, b === {n:1, x:undefined} === 旧a
  3. 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}

D
DevinXian#6·9 年前

这样写程序是作死,作为题目还是可以一看的...浓浓的谭浩强风...错就错在容易忽略a.x优先级高这点

参与回复
登录后即可参与回复。登录