2016-12-03 33 views
3

ES6支持数组解构,它可以像下面那样用简洁的语法来交换变量,但这是否高效,并且在性能敏感的代码中作为数组处理被建议?因为它似乎需要一个新的临时阵列才能完成此操作。是通过数组解构高效交换变量吗?

[a, b] = [b, a] 
+0

您可能会从[规范](http://www.ecma-international.org/ecma-262/6.0/index.html#sec-destructuring-assignment)获得一些评估信息。 – Li357

+0

@ Li357该规范没有详细说明性能 – Bergi

+0

@Bergi我正在处理“似乎需要一个新的临时阵列来完成此操作”的担忧。 – Li357

回答

1

让我们来测试!

let a = 42 
 
let b = 69 
 

 
console.log("for 2000000 iterations"); 
 

 
console.time("deconstruct") 
 
for(let i=2000000; i>=0; --i) 
 
    [a, b] = [b, a]; 
 
console.timeEnd("deconstruct") 
 

 
console.time("classical") 
 
for(let i=2000000; i>=0; --i) { 
 
    let tmp = a 
 
    a = b 
 
    b = tmp 
 
} 
 
console.timeEnd("classical")

所以它不似乎是更好的方式来做到这一点。

+0

你在哪个浏览器中得到了什么结果? – Bergi

+0

你的“功能”测试用例根本不起作用。 – Bergi

+0

啊?它适用于Firefox 57和Chrome上的我;我得到了2000000次迭代 - 解构:22.460ms--经典:3.980ms--函数:1.580ms'。它实际上是ES6箭头函数语法 – NatNgs