我想写这样的东西(在Javascript中):
var obj = { left: left, right: -(left += increment) };
如果我可以确定属性值将按照我编写的顺序进行评估,那么这只会做我想要的。语言是否在任何地方都有这样的保证?
答案 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将评估语句的顺序:从左到右,从上到下。