问题描述
如果我写
var a = [1,2];
var b = {
foo: a.pop(),
bar: a.pop()
};
b
的价值是多少,根据规格?
What is the value of b
, according to the specification?
(通过实验,它是 {foo:2,bar:1}
,但我担心这是否是特定于实现的。)
(By experiment, it's {foo: 2, bar: 1}
, but I worry whether this is implementation-specific.)
推荐答案
参见定义如何解析 ObjectLiteral
生产。
See ECMAScript section 11.1.5 defining how the ObjectLiteral
production is parsed.
特别是:
-
评估PropertyNameAndValueList。
Evaluate PropertyNameAndValueList.
评估PropertyName。
Evaluate PropertyName.
评估AssignmentExpression。
Evaluate AssignmentExpression.
...
其中(1)是递归定义。
Where (1) is a recursive definition.
这意味着左边对象文字中的大多数项目将首先得到评估,因此 {foo:2,bar:1}
确实是指定的。
This means the leftmost item in an object literal will get evaluated first, and so {foo: 2, bar: 1}
is indeed spec-mandated.
这篇关于Javascript对象初始化和评估顺序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!