Многократное назначение в 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-выражение, которое позволяет распаковывать значения из массивов или свойства объектов в отдельные переменные.
Так что вы можете сделать:
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", потому что он был нестандартным, не требовался в сети и усложнил бы новую и очень быструю реализацию.