Запятые в конце списка
Базовый уровень Широко доступно
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с июля 2015 года.
Запятые в конце списка (иногда называемые "финальными запятыми") могут быть полезны при добавлении новых элементов, параметров или свойств в код JavaScript. Если вы хотите добавить новое свойство, вы можете добавить новую строку, не изменяя предыдущую последнюю строку, если эта строка уже использует запятую в конце. Это делает различия в системе контроля версий более чистыми, а редактирование кода может быть менее проблематичным.
JavaScript разрешает запятые в конце списков в массивах с самого начала. Теперь запятые в конце списков также разрешены в литералах объектов, параметрах функций, именованных импортах, именованных экспортах и многом другом.
JSON, однако, не допускает никаких запятых в конце списка.
Описание
JavaScript допускает запятые в конце списка везде, где принимается список значений, разделенных запятыми, и после последнего элемента могут ожидаться другие значения. Это включает:
- Литералы массивов
- Литералы объектов
- Определения параметров
- Вызовы функций
- Именованные импорты
- Именованные экспорты
- Динамический импорт
- Деструктуризация массивов и объектов
Во всех этих случаях запятая в конце списка является полностью необязательной и никак не влияет на семантику программы.
Это особенно полезно при добавлении, удалении или изменении порядка элементов в списке, который охватывает несколько строк, поскольку это уменьшает количество строк, которые необходимо изменить, что помогает как при редактировании, так и при просмотре различий.
[
"foo",
+ "baz",
"bar",
- "baz",
]
Примеры
Запятые в конце списка в литералах
Массивы
JavaScript игнорирует запятые в конце списка в литералах массивов:
const arr = [ 1, 2, 3, ]; arr; // [1, 2, 3] arr.length; // 3
Если используется более одной запятой в конце списка, создается пропуск (или "дыра"). Массив с пропусками называется разреженным (плотный массив не имеет пропусков). При итерации массивов, например, с помощью Array.prototype.forEach() или Array.prototype.map(), пропуски в массиве пропускаются. Разреженные массивы, как правило, нежелательны, поэтому следует избегать нескольких запятых в конце списка.
const arr = [1, 2, 3, , ,]; arr.length; // 5
Объекты
Запятые в конце списка в литералах объектов также являются допустимыми:
const object = {
foo: "bar",
baz: "qwerty",
age: 42,
};
Запятые в конце списка в функциях
Запятые в конце списка также допускаются в списках параметров функций.
Определения параметров
Следующие пары определений функций являются допустимыми и эквивалентными друг другу. Запятые в конце списка не влияют на свойство length объявлений функций или их объект arguments.
function f(p) {}
function f(p,) {}
(p) => {};
(p,) => {};
Запятая в конце списка также работает с определениями методов для классов или объектов:
class C {
one(a,) {}
two(a, b,) {}
}
const obj = {
one(a,) {},
two(a, b,) {},
};
Вызовы функций
Следующие пары вызовов функций являются допустимыми и эквивалентными друг другу.
f(p); f(p,); Math.max(10, 20); Math.max(10, 20,);
Недопустимые запятые в конце списка
Определения параметров функций или вызовы функций, содержащие только запятую, вызовут SyntaxError. Кроме того, при использовании rest-параметров запятые в конце списка не допускаются:
function f(,) {} // SyntaxError: missing formal parameter
(,) => {}; // SyntaxError: expected expression, got ','
f(,) // SyntaxError: expected expression, got ','
function f(...p,) {} // SyntaxError: parameter after rest parameter
(...p,) => {} // SyntaxError: expected closing parenthesis, got ','
Запятые в конце списка в деструктуризации
Запятая в конце списка также допускается в шаблоне деструктуризации:
// array destructuring with trailing comma
[a, b,] = [1, 2];
// object destructuring with trailing comma
const o = {
p: 42,
q: true,
};
const { p, q, } = o;
Однако запятая в конце списка не допускается после rest-элемента, если он присутствует
const [a, ...b,] = [1, 2, 3]; // SyntaxError: rest element may not have a trailing comma
Запятые в конце списка в JSON
Поскольку JSON основан на очень ограниченном подмножестве синтаксиса JavaScript, запятые в конце списка не допускаются в JSON.
Обе строки вызовут SyntaxError:
JSON.parse("[1, 2, 3, 4, ]");
JSON.parse('{"foo" : 1, }');
// SyntaxError JSON.parse: unexpected character
// at line 1 column 14 of the JSON data
Опустите запятые в конце списка, чтобы правильно разобрать JSON:
JSON.parse("[1, 2, 3, 4 ]");
JSON.parse('{"foo" : 1 }');
Запятые в конце списка в именованных импортах и именованных экспортах
Запятые в конце списка допустимы в именованных импортах и именованных экспортах.
Именованные импорты
import {
A,
B,
C,
} from "D";
import { X, Y, Z, } from "W";
import { A as B, C as D, E as F, } from "Z";
Именованные экспорты
export {
A,
B,
C,
};
export { A, B, C, };
export { A as B, C as D, E as F, };
Запятые в конце списка при динамическом импорте
Запятые в конце списка допустимы при динамическом импорте только в том случае, если среда выполнения также реализует второй параметр options.
import("D",);
import(
"D",
{ with: { type: "json" } },
);
Префикс квантификатора
Примечание: Запятая в конце списка в квантификаторе фактически изменяет его семантику с "точно n" на "по крайней мере n".
/x{2}/; // Exactly 2 occurrences of "x"; equivalent to /xx/
/x{2,}/; // At least 2 occurrences of "x"; equivalent to /xx+/
/x{2,4}/; // 2 to 4 occurrences of "x"; equivalent to /xxx?x?/
Спецификации
Совместимость с браузерами
| Настольные | Мобильные | Серверные | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on iOS | Samsung Internet | WebView Android | WebView on iOS | Bun | Deno | Node.js | |
trailing_commas |
1 |
12 |
1 |
9.5 |
1 |
18 |
4 |
10.1 |
1 |
1.0 |
4.4 |
1 |
1.0.0 |
1.0 |
0.10.0 |
trailing_commas_in_dynamic_import |
91 |
91 |
138 |
Нет |
15 |
91 |
138 |
Нет |
15 |
16.0 |
91 |
15 |
1.0.0 |
1.17 |
17.5.0
16.15.0–17.0.0
16.14.0–16.15.0Второй параметр больше не вызывает ошибку парсера, но флаг--experimental-json-modules по-прежнему необходим для загрузки JSON-модулей. |
trailing_commas_in_functions |
58 |
14 |
52 |
45 |
10 |
58 |
52 |
43 |
10 |
7.0 |
58 |
10 |
1.0.0 |
1.0 |
8.0.0 |
trailing_commas_in_object_literals |
1 |
12 |
1 |
9.5 |
3 |
18 |
4 |
10.1 |
1 |
1.0 |
4.4 |
1 |
1.0.0 |
1.0 |
0.10.0 |
См. также
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Trailing_commas