JavaScript代码技巧:foo.x的值是什么
我在GitHub前端面试问题集中发现了这个问题:
var foo = {n: 1};
var bar = foo;
foo.x = foo = {n: 2};
问题:foo.x的值是什么?
答案是undefined
。
我已经进行了一些研究,并且我理解这个问题(如果我错了,请纠正我):
var foo = {n: 1};
声明一个foo
属性n
等于1 的对象。var bar = foo;
声明一个对象bar
,该对象引用与相同的对象foo
。foo.x = foo = {n: 2};
我相信等于foo.x = (foo = {n: 2});
- 然后我
foo.x
等于undefined
。但是,的值bar.x
是object{n:2}
。
如果bar
和foo
是指同一个对象,为什么bar.x
得到的值,而foo.x
为undefined
?真正发生了foo.x = foo =
{n: 2};什么?
回答:
foo.x = foo = {n: 2};
判定foo.x
是指一种属性x
的的{n: 1}
对象,受让人{n: 2}
到foo
,和受让人的新值foo
- {n:
2}-为属性x
的的{n: 1}
对象。
重要的是,foo
这foo.x
指的是之前确定foo
的变化。
参见ES5规范的11.13.1节
令 lref 为评估 LeftHandSideExpression 的结果。
令 rref 为评估 AssignmentExpression 的结果。
赋值运算符从右到左关联,因此您得到:
foo.x = (foo = {n: 2})
首先评估左侧,然后评估右侧。
以上是 JavaScript代码技巧:foo.x的值是什么 的全部内容, 来源链接: utcz.com/qa/403813.html