Javascript对象初始化和评估顺序 [英] Javascript object initialization and evaluation order

查看:74
本文介绍了Javascript对象初始化和评估顺序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果我写

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

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

What is the value of b, according to the specification?

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

(By experiment, it's {foo: 2, bar: 1}, but I worry whether this is implementation-specific.)

推荐答案

参见 ECMAScript第11.1.5节定义如何解析 ObjectLiteral 生产。

See ECMAScript section 11.1.5 defining how the ObjectLiteral production is parsed.

特别是:


PropertyNameAndValueList PropertyName AssignmentExpression
评估如下:

PropertyNameAndValueList , PropertyName : AssignmentExpression is evaluated as follows:


  1. 评估PropertyNameAndValueList。

  1. Evaluate PropertyNameAndValueList.

评估PropertyName。

Evaluate PropertyName.

评估AssignmentExpression。

Evaluate AssignmentExpression.

...

其中(1)是递归定义。

Where (1) is a recursive definition.

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

This means the leftmost item in an object literal will get evaluated first, and so {foo: 2, bar: 1} is indeed spec-mandated.

这篇关于Javascript对象初始化和评估顺序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆