Javascript对象初始化和评估顺序

时间:2013-07-03 00:35:24

标签: javascript semantics

如果我写

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

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

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

2 个答案:

答案 0 :(得分:11)

请参阅ECMAScript section 11.1.5,了解如何解析ObjectLiteral制作。

特别是:

  

PropertyNameAndValueListPropertyNameAssignmentExpression   评估如下:

     
      
  1. 评估PropertyNameAndValueList。

  2.   
  3. 评估PropertyName。

  4.   
  5. 评估AssignmentExpression。

  6.         

    ...

其中(1)是递归定义。

这意味着对象文字中最左边的项目将首先得到评估,因此{foo: 2, bar: 1}确实是指定的。

答案 1 :(得分:1)

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