有一天,我看到了在数组中交换元素的某种方式。像这样:
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解释器不会以这种方式行事?
答案 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
最好不要依赖它。