Инициализация объекта Javascript и порядок оценки

Если я напишу

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

Какова стоимость bсогласно спецификации?

(Экспериментально это {foo: 2, bar: 1}, но я волнуюсь, зависит ли это от реализации.)

2 ответа

См. Раздел ECMAScript 11.1.5, определяющий, как ObjectLiteral производство разбирается.

Особенно:

PropertyNameAndValueList, PropertyName: AssignmentExpression оценивается следующим образом:

  1. Оцените PropertyNameAndValueList.

  2. Оцените PropertyName.

  3. Оценить AssignmentExpression.

...

Где (1) - рекурсивное определение.

Это означает, что самый левый элемент в литерале объекта будет оцениваться первым, и поэтому {foo: 2, bar: 1} действительно специфицирован.

Они оцениваются в порядке их написания.

Другие вопросы по тегам