Si j'écris
var a = [1,2]; var b = { foo: a.pop(), bar: a.pop() };
Quelle est la valeur de b
, selon la spécification?
(Par expérience, c'est {foo: 2, bar: 1}
, mais je me demande si cela est spécifique à la mise en œuvre.)
Voir la section 11.1.5 d'ECMAScript définissant comment la production ObjectLiteral
est analysée.
En particulier:
PropertyNameAndValueList
,PropertyName
:AssignmentExpression
est évalué comme suit:
Évaluez PropertyNameAndValueList.
Évaluez PropertyName.
Évaluez AssignmentExpression.
…
Où (1) est une définition récursive.
Cela signifie que l'élément le plus à gauche dans un littéral d'objet sera évalué en premier, et donc {foo: 2, bar: 1}
est en effet spécifié.
Ils sont évalués dans l'ordre dans lequel ils sont écrits.