Spec-Zone.ru › JavaScript

Запятые в конце списка

Базовый уровень Широко доступно

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с июля 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?/

Спецификации

Спецификация
ECMAScript® 2027 Language Specification
# prod-Elision
ECMAScript® 2027 Language Specification
# prod-ObjectLiteral
ECMAScript® 2027 Language Specification
# prod-ArrayLiteral
ECMAScript® 2027 Language Specification
# prod-Arguments
ECMAScript® 2027 Language Specification
# prod-FormalParameters
ECMAScript® 2027 Language Specification
# prod-CoverParenthesizedExpressionAndArrowParameterList
ECMAScript® 2027 Language Specification
# prod-NamedImports
ECMAScript® 2027 Language Specification
# prod-NamedExports
ECMAScript® 2027 Language Specification
# prod-QuantifierPrefix
ECMAScript® 2027 Language Specification
# prod-annexB-InvalidBracedQuantifier

Совместимость с браузерами

Настольные Мобильные Серверные
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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API