Кінцеві коми

Кінцеві коми (іноді їх називають "заключними комами") можуть бути корисними для додавання нових елементів, параметрів чи властивостей у коді JavaScript. Якщо ви хочете додати нову властивість, ви можете просто додати новий рядок, не змінюючи перед цим попередній рядок, якщо цей рядок вже використовує кінцеву кому. Це робить контроль версій зрозумілішим, а редагування коду може бути менш проблемним.

Кінцеві коми були дозволені у масивних літералах JavaScript з самого початку, а пізніше вони були додані до об'єктних літералів (ECMAScript 5) та нещодавно (ECMAScript 2017) до параметрів функцій.

JSON, однак, не дозволяє кінцеві коми.

Синтаксис

,

Приклади

Кінцеві коми у літералах

Масиви

JavaScript ігнорує кінцеві коми у масивах:

var arr = [
  1, 
  2, 
  3, 
];

arr; // [1, 2, 3]
arr.length; // 3

Якщо використовується більше однієї кінцевої коми, утворюється пропуск (або діра). Масив з дірами називається розрідженим (щільний масив не має дір). Під час перебору масивів, наприклад, за допомогою Array.prototype.forEach() або Array.prototype.map(), діри в масивах пропускаються.

var arr = [1, 2, 3,,,];
arr.length; // 5

Об'єкти

Починаючи з ECMAScript 5, кінцеві коми у об'єктних літералах також дозволені:

var object = { 
  foo: "bar", 
  baz: "qwerty",
  age: 42,
};

Кінцеві коми у функціях

ECMAScript 2017 дозволяє кінцеві коми у списку параметрів функцій.

Визначення параметрів

Наступні пари визначень функцій є дозволеними та еквівалентні одне одному. Кінцеві коми не впливають на властивість length оголошень функцій або на їхній об'єкт arguments.

function f(p) {}
function f(p,) {} 

(p) => {};
(p,) => {};

Кінцеві коми також працюють у визначеннях методів для класів чи об'єктів:

class C {
  one(a,) {}
  two(a, b,) {}
}

var obj = {
  one(a,) {},
  two(a, b,) {},
};

Виклики функцій

Наступні пари викликів функцій є дозволеними та еквівалентні один одному.

f(p);
f(p,);

Math.max(10, 20);
Math.max(10, 20,);

Недозволені кінцеві коми

Визначення параметрів функцій або виклики функцій, які містять лише кому, викинуть SyntaxError. Крім того, при використанні залишкових параметрів кінцеві коми недозволені:

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 ','

Кінцеві коми у деструктуризації

Кінцеві коми також дозволені по ліву сторону при використанні деструктуризаційного присвоєння:

// деструктуризація масиву з кінцевою комою
[a, b,] = [1, 2];

// деструктуризація об'єкта з кінцевою комою
var o = {
  p: 42, 
  q: true,
};
var {p, q,} = o;

Знову ж таки, при використання залишкового елемента, буде викинуто SyntaxError:

var [a, ...b,] = [1, 2, 3];
// SyntaxError: rest element may not have a trailing comma

Кінцеві коми у JSON

Кінцеві коми у об'єктах були введені лише починаючи з ECMAScript 5. Оскільки JSON базується на синтаксисі JavaScript, що існував до ES5, кінцеві коми не дозволені у 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 }');

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

Специфікація
ECMAScript (ECMA-262)

Сумісність з веб-переглядачами

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidFirefox for AndroidOpera for AndroidSafari on iOSSamsung InternetNode.js
Trailing commasChrome Full support 1Edge Full support 12Firefox Full support 1IE Full support 9Opera Full support 9.5Safari Full support 1WebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support 10.1Safari iOS Full support 1Samsung Internet Android Full support 1.0nodejs Full support 0.1.100
Trailing comma in functionsChrome Full support 58Edge Full support 14Firefox Full support 52IE No support NoOpera Full support 45Safari Full support 10WebView Android No support NoChrome Android Full support 58Firefox Android Full support 52Opera Android Full support 43Safari iOS Full support 10Samsung Internet Android Full support 7.0nodejs Full support 8.0.0
Trailing comma in object literalsChrome Full support 1Edge Full support 12Firefox Full support 1IE Full support 9Opera Full support 9.5Safari Full support 3WebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support 10.1Safari iOS Full support 1Samsung Internet Android Full support 1.0nodejs Full support 0.1.100

Legend

Full support  
Full support
No support  
No support

Див. також