Я был недавно укушен ошибкой, где случайно было слишком много запятых в массиве JavaScript, что приводит нас к сегодняшнему вопросу: почему
[1, 2, , 4, 5]
действительный массив JavaScript, а не синтаксическая ошибка? Является ли он четко определенным в стандарте ECMAScript, который должен включать элементы? Кажется, такая легкая опечатка.
Для получения дополнительной информации можно отметить, что [1, 2,, 4, 5][2];
не undefined
.
Является ли он четко определенным в стандарте ECMAScript, который должен включать элементы?
Да, это. См. Https://tc39.github.io/ecma262/#sec-array-initializer
Элементы массива могут быть удалены в начале, середине или конце списка элементов [ArrayLiteral]. Всякий раз, когда запятой в списке элементов не предшествует AssignmentExpression (т.е. Запятая в начале или после другой запятой), отсутствующий элемент массива вносит вклад в длину массива и увеличивает индекс последующих элементов. Элементы массива элементов не определены. Если элемент заканчивается в конце массива, этот элемент не вносит вклад в длину массива.
В грамматике найдите нетерминальный Elision.
Такие массивы называются разреженными массивами.