Javascript对象初始化和评估顺序

Javascript对象初始化和评估顺序

本文介绍了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.)

推荐答案

参见定义如何解析 ObjectLiteral 生产。

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

特别是:


  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对象初始化和评估顺序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-22 18:11