Многократное назначение в JavaScript? Что делает [a,b,c] = [1, 2, 3]; имею в виду?

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

Решение

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

Вот обновленная информация на эту тему: начиная с версии 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"

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

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

Другие вопросы по тегам