var a = [1,2];
var b = {
foo: a.pop(),
bar: a.pop()
};
什麼是b
值,根據規範?
(通過實驗,它的{foo: 2, bar: 1}
,但我擔心這是否是實現特定的。)
var a = [1,2];
var b = {
foo: a.pop(),
bar: a.pop()
};
什麼是b
值,根據規範?
(通過實驗,它的{foo: 2, bar: 1}
,但我擔心這是否是實現特定的。)
他們在他們的排列順序進行評估。
請參閱ECMAScript section 11.1.5定義如何解析生產ObjectLiteral
。
特別是:
PropertyNameAndValueList
,PropertyName
:AssignmentExpression
如下評價:
評估PropertyNameAndValueList。
評估PropertyName。
評估AssignmentExpression。
...
其中(1)是一個遞歸定義。
這意味着對象文字中最左邊的項目將首先被評估,因此{foo: 2, bar: 1}
確實是規範的。
清晰,簡潔並經過驗證的+1 –
爲什麼它是實現特定的? 'pop'突變原始數組。 – elclanrs
@elclanrs,我認爲問題的關鍵是對象'b'屬性的值是否總是按它們在代碼中列出的順序進行評估。 –
哦,我明白了......現在這實際上是一個很好的問題,但是雖然對象中屬性的順序很微不足道,但評估順序並不是這樣,所以我認爲這不是問題,但我可能是錯的。 .. – elclanrs