如果我写
var a = [1,2];
var b = {
foo: a.pop(),
bar: a.pop()
};
根据规范,b
的价值是多少?
(通过实验,它是{foo: 2, bar: 1}
,但我担心这是否是特定于实现的。)
答案 0 :(得分:11)
请参阅ECMAScript section 11.1.5,了解如何解析ObjectLiteral
制作。
特别是:
PropertyNameAndValueList
,PropertyName
:AssignmentExpression
评估如下:
评估PropertyNameAndValueList。
评估PropertyName。
- 醇>
评估AssignmentExpression。
...
其中(1)是递归定义。
这意味着对象文字中最左边的项目将首先得到评估,因此{foo: 2, bar: 1}
确实是指定的。
答案 1 :(得分:1)
按照写作顺序对它们进行评估。