这是一个简单的问题,我之前已经做过。我只是不记得是怎么回事,或确切地叫什么。
在python中,我可以这样做:
arr = ['one', 'two']
one, two = arr
如何在JavaScript中做到这一点?
这是一个简单的问题,我之前已经做过。我只是不记得是怎么回事,或确切地叫什么。
在python中,我可以这样做:
arr = ['one', 'two']
one, two = arr
如何在JavaScript中做到这一点?
Answers:
这是目前唯一的跨浏览器兼容解决方案AFAIK:
var one = arr[0],
two = arr[1];
ES6将允许进行销毁分配:
let [x, y] = ['foo', 'bar'];
console.log(x); // 'foo'
console.log(y); // 'bar'
或者,坚持最初的示例:
var arr = ['one', 'two'];
var [one, two] = arr;
您还可以创建一个默认值:
const [one = 'one', two = 'two', three = 'three'] = [1, 2];
console.log(one); // 1
console.log(two); // 2
console.log(three); // 'three'
那是破坏性的任务。您可以在某些浏览器中使用以下语法进行操作:
[one, two] = arr;
一些最新的浏览器和编译器(如Babel和Traceur)都支持它。这是ECMAScript 4引入的功能,后来成为ECMAScript Harmony,最终成为ES 2015。
这个问题已经很老了,但我想发布这种替代(2016)解决方案:还可以使用传播运算符“ ...”。
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Spread_operator
let xAndY = [42, 1337];
let f = function(x, y) { return x + y; };
f(...xAndY);
执行认真的想法。
http://jsfiddle.net/RichAyotte/6D2wP/
(function(a, b, c, d) {
console.log(a, b, c, d);
}.apply(this, ['a', 'b', 'c', 'd']));
var one = arr[0];
var two = arr[1];
var
来防止变量污染全局范围。
var
每个作用域的all可能是一个更好的主意,而不是单独进行两个var
声明。
CoffeeScript拥有它:http : //jashkenas.github.com/coffee-script/#pattern_matching
并且,引用自页面顶部:
“ CoffeeScript是一种可编译为JavaScript的小语言。可以将它视为JavaScript不太那么夸张的小兄弟-相同的基因,大致相同的身高,但是风格不同。与JavaScript中的功能一一对应,这只是另一种说法。”