Многократное назначение в JavaScript?Что значит [a, b, c] = [1, 2, 3];имею в виду? - PullRequest
20 голосов
/ 21 октября 2010

Для проекта разработчик прислал нам файл .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.

Это просто любопытство, есть ли у вас какая-либо ссылка или ссылка, которая говорит, что этот код соответствует стандарту JS / ECMA или нет?

Что ты думаешь?

Ответы [ 4 ]

17 голосов
/ 21 октября 2010

Это функция, называемая деструктурирующим назначением , которая была добавлена ​​в JavaScript 1.7 и ECMAScript 6. Она не является частью ECMAScript 5: Что такое межбраузерная поддержка для нового JavaScript 1.7функции?В частности, массивы и оператор "let"

5 голосов
/ 21 октября 2010

Это деструктурирующее задание, доступное в Javascript 1.7 (mozilla) и некоторых новых браузерах: http://www.robertnyman.com/javascript/javascript-1.7.html#destructuring-assignment

4 голосов
/ 23 августа 2017

Вот обновление на эту тему: начиная с 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"
2 голосов
/ 15 ноября 2010

У более старого движка JavaScript "futhark" в Opera была поддержка этого, но он был добавлен в новый движок "carakan", потому что он был нестандартным, не требовался в сети и усложнил бы новую и очень быструю реализацию.

...