在JavaScript中将数组解包为单独的variables

这是一个简单的问题,我以前做过。 我不记得是怎么回事,或者说到底是怎么回事。

在Python中,我可以这样做:

arr = ['one', 'two'] one, two = arr 

我如何在JavaScript中做到这一点?

这是目前唯一的跨浏览器兼容解决schemeAFAIK:

 var one = arr[0], two = arr[1]; 

ES6将允许解构赋值:

 var [x, y] = ['foo', 'bar']; console.log(x); // 'foo' console.log(y); // 'bar' 

或者,坚持你最初的例子:

 var arr = ['one', 'two']; var [one, two] = arr; 

这是解构赋值 。 您可以使用以下语法在一些浏览器中执行此操作:

 [one, two] = arr; 

它支持一些最新的浏览器和转发器,如Babel和Traceur 。 这是ECMAScript 4引入的function,后来成为ECMAScript Harmony,最终成为ES 2015。

如果要将数组项作为函数parameter passing,可以使用数组的apply函数。

CoffeeScript有它: http : //jashkenas.github.com/coffee-script/#pattern_matching

而且,从页面顶部引用:

“CoffeeScript是一种可以编译成JavaScript的小语言,可以把它看作是JavaScript不那么炫耀的小孩兄弟 – 基本相同,高度差不多,但是风格不同,除了一小笔奖金之外,与JavaScript中的对等function相比,这只是另一种说法而已。“

 var one = arr[0]; var two = arr[1]; 

执行严肃的想法。

http://jsfiddle.net/RichAyotte/6D2wP/

 (function(a, b, c, d) { console.log(a, b, c, d); }.apply(this, ['a', 'b', 'c', 'd'])); 

问题是相当老,但我想发布这个替代(2016年)的解决scheme:也可以使用传播运算符“…”。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator

 let xAndY = [42, 1337]; let f = function(x, y) { return x + y; }; f(...xAndY);