From ECMA 3rd Edition specifications:
The source text of an ECMAScript
program is first converted into a
sequence of input elements, which are
either tokens, line terminators,
comments, or white space. The source
text is scanned from left to right,
repeatedly taking the longest possible
sequence of characters as the next
input element.
In other words, yes, the specification addresses this. This code should always work:
var left = 5, increment = 1;
var obj = { left: left, right: -(left += increment) };
// obj.left === 5
// obj.right === -6
This does NOT have to do with the order of attributes as they are stored in an object, but rather, the order in which JavaScript will evaluate your statement: left-to-right, up-to-down.