Javascript. Присвоить значения массива нескольким переменным?

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

этот код отлично работает в Firefox, получая a = 1, b = 2 и c = 3,
но он не работает в Chrome. Это ошибка Chrome или это недопустимый код javascript? (Я не нашел его в ссылках на javascript)

Как я могу изменить этот код, чтобы он был подходящим для Chrome, с минимальным ущербом для него?
(Мне не очень нравится писать a = arr [0]; b = arr [1]... или то же самое с arr.shift() все время)

P.S. это всего лишь пример кода, в реальном коде
Я получаю массив arr из моего кода

Ответ 1

Это новая функция JavaScript 1.7, называемая Назначение деструктурирования:

Назначение деструктуризации позволяет извлекать данные из массивов или объектов, используя синтаксис, который отражает конструкцию массива и объектных литералов.

Литеральные выражения объектов и массивов предоставляют простой способ создания специальных пакетов данных. Создав эти пакеты данных, вы можете использовать их так, как хотите. Вы даже можете вернуть их из функций.

Одна полезная вещь, которую вы можете сделать с назначением деструктуризации, - это прочитать целую структуру в одном выражении, хотя с ними можно сделать несколько интересных вещей, как показано в разделе, полном следующих примеров.

Вы можете использовать назначение деструктуризации, например, для замены значений:

var a = 1;
var b = 3;
[a, b] = [b, a];

Эта возможность похожа на функции, присутствующие в таких языках, как Perl и Python.

К сожалению, согласно этой таблице версий, JavaScript 1.7 не был реализован в Chrome. Но он должен быть там:

  • FireFox 2.0 +
  • IE 9
  • Опера 11.50.

Попробуйте сами в этом jsfiddle: http://jsfiddle.net/uBReg/

Я тестировал это в Chrome (не удалось), IE 8 (не удалось) и FireFox 5 (который работал в таблице wiki).

Ответ 2

Это возможно только для Javascript 1.7, как уже ответил @Justin. Вот пробная версия для моделирования в широко распространенных браузерах:

function assign(arr, vars) {
    var x = {};
    var num = Math.min(arr.length, vars.length);
    for (var i = 0; i < num; ++i) {
        x[vars[i]] = arr[i];
    }
    return x;
}
var arr = [1, 2, 3];
var x = assign(arr, ['a', 'b', 'c']);
var z = x.a + x.b + x.c;  // z == 6

Я не знаю, насколько он полезен.