Javascript: [] = 5, No Syntax Error? Зачем?

Да, он работает в моей консоли firebug. Почему в этом нет синтаксической ошибки?

[] = 5; [] = doThis(); [] = (function() {})();

Просто интересно, почему это разрешено.

Ответы

Ответ 1

Похоже, что Javascript в FF позволяет назначать с помощью сопоставления, поэтому вы можете установить несколько переменных одним выстрелом:

[x,y] = [5,6]; // sets x to 5 and y to 6

"Очевидно", некоторые реализации JS очень прощают и молча игнорируют любые дополнительные значения, поэтому это делает то же самое:

[x,y] = [5,6,7];

и это ничего не даст:

[] = [5,6,7];

и, кроме того, похоже, что FF даже хочет пойти с корпусом, который не соответствует массиву вообще:

[x] = 5; // makes x undefined

поэтому, если вы используете [] = whatever, тогда "ничто не получает значение undefined", поэтому оно сводится к простому оценке RHS.

(Отказ от ответственности: все это просто угадывает смысл, запустив материал в FF...)

Ответ 2

В Chrome появляется сообщение об ошибке "Неотдача ReferenceError: Недопустимая левая сторона в назначении". IE8 выбрасывает "Ошибка: не может назначить" [object] "". FF действительно не выдает ошибку.

Скорее всего, это просто неудача JavaScript-движка Firefox и в любом случае не влияет на функциональность литерала массива [].