Инициализация и оценка объекта JavaScript Если я пишу var a = [1,2]; var b = { foo: a.pop(), bar: a.pop() }; Каково значение b, согласно спецификации? (В эксперименте он {foo: 2, bar: 1}, но я беспокоюсь, является ли это специфичным для реализации.) Ответ 1 См. раздел 11.1.5 ECMAScript, определяющий способ обработки ObjectLiteral. В частности: PropertyNameAndValueList, PropertyName: AssignmentExpressionоценивается следующим образом: Оценить свойствоNameAndValueList. Вычислить имя свойства. Вычислить присвоение.... Где (1) - рекурсивное определение. Это означает, что самый левый элемент в литерале объекта сначала оценивается, поэтому {foo: 2, bar: 1} действительно специфицирован. Ответ 2 Они оцениваются в том порядке, в котором они записаны.
Ответ 1 См. раздел 11.1.5 ECMAScript, определяющий способ обработки ObjectLiteral. В частности: PropertyNameAndValueList, PropertyName: AssignmentExpressionоценивается следующим образом: Оценить свойствоNameAndValueList. Вычислить имя свойства. Вычислить присвоение.... Где (1) - рекурсивное определение. Это означает, что самый левый элемент в литерале объекта сначала оценивается, поэтому {foo: 2, bar: 1} действительно специфицирован.