Являются ли массивы как значения lvalues в JavaScript совместимыми с ECMAScript?
-
11-09-2019 - |
Вопрос
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 возвращает ошибку.
Решение
Нет, это функция, представленная в JavaScript 1.7, которая называется разрушающее назначение.JavaScript - это не ECMAScript.ECMAScript - это попытка стандартизации некоторых функций JavaScript.Существует только два движка JavaScript:(Паук|След|Действие) Обезьяна и Носорог.Любой другой движок - это движок 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 частично реализует некоторое назначение деструктурирования.Он не поддерживает его для объектов или в аргументах функции, но он поддерживает ваш простой пример.