Spec-Zone.ru › JavaScript

Оператор группировки ( )

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

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

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

Спецификация
ECMAScript® 2027 Language Specification
# sec-grouping-operator

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

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

См. также

  • Приоритет операторов
  • delete
  • typeof

© 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

Spec-Zone.ru

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