Javascript对象文字中的属性评估顺序

时间:2009-09-10 01:53:34

标签: javascript

我想写这样的东西(在Javascript中):

var obj = { left: left, right: -(left += increment) };

如果我可以确定属性值将按照我编写的顺序进行评估,那么这只会做我想要的。语言是否在任何地方都有这样的保证?

1 个答案:

答案 0 :(得分:5)

来自ECMA 3rd Edition specifications

  

ECMAScript的源文本   程序首先转换为   输入元素的序列,是   令牌,线路终结器,   评论或空格。来源   文字从左向右扫描,   反复尽可能长时间   字符序列作为下一个   输入元素。

换句话说,是的,规范解决了这个问题。此代码应始终有效:

var left = 5, increment = 1;
var obj = { left: left, right: -(left += increment) };
// obj.left  ===  5
// obj.right === -6

这与属性的顺序无关,因为它们存储在对象中,而是JavaScript将评估语句的顺序:从左到右,从上到下。