JavaScript中的多重赋值?`[ a, b, c ] = [ 1, 2, 3 ]`是什么意思?

32

有一个开发者为一个项目给我们发送了一个 JS 文件,其中的代码类似于这样:

var myList = [ 1, 2, 3 ];
var a, b, c;

[ a, b, c ] = myList;

代码可以在Opera 10.30和Firefox 3.6.x中工作,但是在Opera 10.60和Chrome中不行。

只是出于好奇:你是否有任何参考或链接表明这段代码是否符合ECMAScript标准?


我很高兴发现自Chrome版本49(https://www.chromestatus.com/feature/4588790303686656)起,该功能已经被引入到桌面版Chrome中。我已经在我的Chrome扩展代码中进行了验证 https://github.com/chuan6/webXi/commit/8283ea713ea5c8c050750b5cd64c6f922817f727#diff-b227432cc34ef4d8e3d6af1fcd6b24f5R86。 - leo
2
如果有人在这里想知道,你也可以使用 var [a,b,c] = myList; 来达到同样的效果。 - arekolek
4个回答

24

12

以下是该主题的最新更新:自JavaScript 1.7版本起,所有主要浏览器都支持解构赋值语句:请参见浏览器兼容性

解构赋值语法是一种 JavaScript 表达式,它使得可以从数组中获取值或对象中的属性,并将它们分配到不同的变量中。

—— MDN文档

所以你可以这样做:

let a, b;
[a, b] = ["Hello", "World"];

console.log(a); // "Hello"
console.log(b); // "World"

如果您正在定义变量,可以简单地在一行中完成:

let [a, b] = ["Hello", "World"];

console.log(a); // "Hello"
console.log(b); // "World"

5

2

Opera的旧版JavaScript引擎"futhark"支持此功能,但在新引擎"carakan"中被删除,因为它是非标准的,在网页上不需要,并且会使新的、非常快速的实现变得复杂。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接