2016-07-01 79 views
0

有一天我看到某種方式來交換數組中的元素。像這樣:Javascript。數組初始化順序的元素

var arr = [1,2,3]; 
arr[0] = [arr[1], arr[1] = arr[0]][0]; 

顯然這種方法假設臨時數組arr[1]的第一值將前第二arr[1] = arr[0]來計算。
其他值都是相同的。合成示例:

var x = 1; 
var arr = [x, x += 1, x += 1]; 
arr; // [1,2,3] or [3,3,2] or maybe [3,2,3]? 

是否有任何擔保JavaScript解釋器不會以這種方式行事?

回答

1

JS數組的初始化保證要被評估左到右

ArrayAccumulation(元素列表:元素列表,省音[選擇] AssignmentExpression):

0.1。讓postIndex是使用參數array和nextIndex爲ElementList執行ArrayAccumulation的結果...

.4。讓initResult成爲評估AssignmentExpression的結果。

@http://www.ecma-international.org/ecma-262/6.0/#sec-runtime-semantics-arrayaccumulation

所以最好不要依賴,雖然。

+0

「*最好不要依賴那個。」 - 「呃?你絕對可以依靠它。 – Bergi