Оператор группировки ( )
Базовый уровень Широко доступен
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с июля 2015 года.
Оператор группировки ( ) контролирует приоритет вычисления в выражениях. Он также выступает в качестве контейнера для произвольных выражений в определенных синтаксических конструкциях, где в противном случае возникли бы неоднозначность или синтаксические ошибки.
Попробовать
console.log(1 + 2 * 3); // 1 + 6 // Expected output: 7 console.log(1 + (2 * 3)); // 1 + 6 // Expected output: 7 console.log((1 + 2) * 3); // 3 * 3 // Expected output: 9 console.log(1 * 3 + 2 * 3); // 3 + 6 // Expected output: 9
Синтаксис
(expression)
Параметры
-
expression - Любое выражение, подлежащее вычислению, включая выражения, объединенные запятыми.
Описание
Оператор группировки состоит из пары скобок вокруг выражения, которое группирует его содержимое. Оператор отменяет обычный приоритет операторов, так что операторы с более низким приоритетом (вплоть до оператора запятой) могут быть вычислены перед оператором с более высоким приоритетом.
Примеры
Использование оператора группировки
Вычисление сложения и вычитания перед умножением и делением.
const a = 1; const b = 2; const c = 3; // default precedence a + b * c; // 7 // evaluated by default like this a + (b * c); // 7 // now overriding precedence // addition before multiplication (a + b) * c; // 9 // which is equivalent to a * c + b * c; // 9
Обратите внимание, что в этих примерах порядок вычисления операторов изменился, но порядок вычисления операндов — нет. Например, в этом коде вызовы функций a(), b() и c() вычисляются слева направо (обычный порядок вычисления) до того, как будет рассмотрен порядок операторов.
a() * (b() + c());
Функция a будет вызвана перед функцией b, которая будет вызвана перед функцией c. Более подробную информацию о приоритете операторов см. на ее справочной странице.
Использование оператора группировки для устранения неоднозначности синтаксического анализа
Выражение expression statement не может начинаться с ключевого слова function, поскольку парсер воспримет это как начало объявления функции. Это означает, что следующий синтаксис IIFE является недействительным:
function () {
// code
}();
Оператор группировки может использоваться для устранения этой неоднозначности, поскольку, когда парсер видит открывающую скобку, он знает, что то, что за ней следует, должно быть выражением, а не объявлением.
(function () {
// code
})();
Вы также можете использовать оператор void для устранения неоднозначности.
В теле выражения стрелочной функции (которое напрямую возвращает выражение без ключевого слова return) оператор группировки может использоваться для возврата выражения объектного литерала, поскольку в противном случае левая фигурная скобка будет интерпретирована как начало тела функции.
const f = () => ({ a: 1 });
Если доступ к свойству осуществляется через числовой литерал, точка доступа к свойству . может быть неоднозначна с десятичной точкой, если только число уже не содержит десятичной точки. Вы можете заключить целочисленные литералы в скобки, чтобы устранить эту неоднозначность.
(1).toString(); // "1"
Оператор группировки и автоматическая вставка точки с запятой
Оператор группировки может смягчить недостатки автоматической вставки точки с запятой (ASI). Например, между ключевым словом return и возвращаемым выражением не должно быть разрыва строки:
function sum(a, b) {
return
a + b;
}
Этот код вернет undefined, потому что точка с запятой вставляется непосредственно после ключевого слова return, что приводит к немедленному выходу из функции без вычисления a + b. Если возвращаемое выражение длинное и вы хотите сохранить его в хорошем формате, вы можете использовать оператор группировки, чтобы указать, что за ключевым словом return следует выражение, и предотвратить вставку точки с запятой:
function sum(a, b) {
return (
a + b
);
}
Однако группировка может также создавать опасности ASI. Когда строка начинается с открывающей скобки, а предыдущая строка заканчивается выражением, парсер не вставит точку с запятой перед разрывом строки, поскольку это может быть середина вызова функции. Например:
const a = 1 (1).toString()
Этот код будет проанализирован как:
const a = 1(1).toString();
Что вызывает "TypeError: 1 is not a function". Если ваш стиль кодирования не использует точки с запятой, помните, что когда строка начинается с открывающей скобки, предваряйте ее точкой с запятой. Эта практика рекомендована некоторыми форматерами и/или руководствами по стилю, включая Prettier и standard.
const a = 1 ;(1).toString()
Дополнительные советы по работе с ASI см. в соответствующем разделе справки.
Спецификации
Совместимость с браузерами
| Настольные | Мобильные | Серверные | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 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 | |
grouping |
1 |
12 |
1 |
3 |
1 |
18 |
4 |
10.1 |
1 |
1.0 |
4.4 |
1 |
1.0.0 |
1.0 |
0.10.0 |
См. также
- Приоритет операторов
deletetypeof
© 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/Operators/Grouping