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
