如果我写
var a = [1,2];
var b = {
foo: a.pop(),
bar: a.pop()
};
b
根据规范,的值是多少?
(通过实验,它是{foo: 2, bar: 1}
,但我担心这是否是特定于实现的。)
如果我写
var a = [1,2];
var b = {
foo: a.pop(),
bar: a.pop()
};
b
根据规范,的值是多少?
(通过实验,它是{foo: 2, bar: 1}
,但我担心这是否是特定于实现的。)
请参阅ECMAScript 第 11.1.5 节,定义如何ObjectLiteral
解析产生式。
尤其:
PropertyNameAndValueList
,PropertyName
:AssignmentExpression
评估如下:
评估 PropertyNameAndValueList。
评估 PropertyName。
评估 AssignmentExpression。
...
其中 (1) 是递归定义。
这意味着对象文字中最左边的项将首先被评估,因此{foo: 2, bar: 1}
确实是规范要求的。
它们按照编写顺序进行评估。