的JavaScript。数组初始化顺序的元素

时间:2016-07-01 10:11:04

标签: javascript arrays specifications

有一天,我看到了在数组中交换元素的某种方式。像这样:

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 个答案:

答案 0 :(得分:1)

保证JS数组初始值设定项从左到右进行评估

  

ArrayAccumulation(ElementList:ElementList,Elision [opt] AssignmentExpression):

     

0.1。让postIndex成为使用arguments array和nextIndex ...

对ElementList执行ArrayAccumulation的结果      

0.4。让initResult成为评估AssignmentExpression的结果。

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

最好不要依赖它。