Являются ли массивы lvalues ​​в JavaScript, совместимом с ECMAScript?

Firefox 3.5.3 (по крайней мере) позволяет мне писать код вроде:

var array = [4, 5, 6];
var foo, bar, baz;
[foo, bar, baz] = array;

в какой момент

foo => 4
bar => 5
baz => 6

что может быть весьма полезно для ясности кода.

Это считается ECMAScript-совместимым? Я ничего не видел в спецификации, но JSLint возвращает ошибку.

1 ответ

Решение

Нет, в JavaScript 1.7 появилась функция, называемая деструктурирующим присваиванием. JavaScript не является ECMAScript. ECMAScript - это попытка стандартизации некоторых функций JavaScript. Есть только два движка JavaScript: (Spider|Trace|Action)Monkey и Rhino. Любой другой движок - это движок ECMAScript.

Вот некоторые примеры:

var {a, b} = {b:2, a:1}; // a === 1, b === 2
var [c, d] = [3, 4]; // c === 3, d === 4
var {x: e} = {x: 5}; //  e === 5
function f({a, b: c}, [d, e]) {
  // same as: var [{a, b: c}, [d, e]] = arguments
}

Opera частично реализует некоторое деструктурирующее назначение. Он не поддерживает его для объектов или аргументов функций, но поддерживает ваш простой пример.

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