Javascript对象初始化和评估顺序

Javascript object initialization and evaluation order

本文关键字:评估 顺序 初始化 对象 Javascript      更新时间:2023-09-26

如果我写

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

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

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

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

特别是:

PropertyNameAndValueListPropertyName:AssignmentExpression评估如下:

  1. 评估PropertyNameAndValueList。

  2. 评估PropertyName。

  3. 评估AssignmentExpression。

其中(1)是递归定义。

这意味着对象文字中最左边的项将首先进行求值,因此{foo: 2, bar: 1}确实是规范强制的。

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