10

如果我写

var a = [1,2];
var b = {
  foo: a.pop(),
  bar: a.pop()
};

b根据规范,的值是多少?

(通过实验,它是{foo: 2, bar: 1},但我担心这是否是特定于实现的。)

4

2 回答 2

12

请参阅ECMAScript 第 11.1.5 节,定义如何ObjectLiteral解析产生式。

尤其:

PropertyNameAndValueList, PropertyName:AssignmentExpression 评估如下:

  1. 评估 PropertyNameAndValueList。

  2. 评估 PropertyName。

  3. 评估 AssignmentExpression。

...

其中 (1) 是递归定义。

这意味着对象文字中最左边的项将首先被评估,因此{foo: 2, bar: 1}确实是规范要求的。

于 2013-07-03T01:08:49.850 回答
1

它们按照编写顺序进行评估。

于 2013-07-03T00:53:02.807 回答