Spec-Zone.ru › JavaScript

Сложение (+)

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

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с июля 2015 года.

Оператор сложения (+) производит сумму числовых операндов или конкатенацию строк.

Попробуйте

console.log(2 + 2);
// Expected output: 4

console.log(2 + true);
// Expected output: 3

console.log("hello " + "everyone");
// Expected output: "hello everyone"

console.log(2001 + ": A Space Odyssey");
// Expected output: "2001: A Space Odyssey"

Синтаксис

x + y

Описание

Оператор + перегружен для двух различных операций: числового сложения и конкатенации строк. При вычислении он сначала приводит оба операнда к примитивам. Затем проверяются типы двух операндов:

  • Если одна сторона является строкой, другой операнд также преобразуется в строку, и они конкатенируются.
  • Если оба операнда являются BigInt, выполняется сложение BigInt. Если один операнд является BigInt, а другой нет, выбрасывается TypeError.
  • В противном случае обе стороны преобразуются в числа, и выполняется числовое сложение.

Конкатенация строк часто считается эквивалентной шаблонным литералам или String.prototype.concat(), но это не так. Сложение приводит выражение к примитиву, что в первую очередь вызывает valueOf(); с другой стороны, шаблонные литералы и concat() приводят выражение к строке, что в первую очередь вызывает toString(). Если выражение имеет метод [Symbol.toPrimitive](), конкатенация строк вызывает его с "default" в качестве подсказки, в то время как шаблонные литералы используют "string". Это важно для объектов, которые имеют различные строковые и примитивные представления — например, Temporal, чьи методы valueOf() объекта генерируют исключение.

const t = Temporal.Now.instant();
"" + t; // Throws TypeError
`${t}`; // '2022-07-31T04:48:56.113918308Z'
"".concat(t); // '2022-07-31T04:48:56.113918308Z'

Рекомендуется не использовать "" + x для выполнения преобразования в строку.

Примеры

Сложение с использованием чисел

1 + 2; // 3

Другие значения, не являющиеся строками и не являющиеся BigInt, преобразуются в числа:

true + 1; // 2
false + false; // 0

Сложение с использованием BigInt

1n + 2n; // 3n

Вы не можете смешивать операнды BigInt и числа при сложении. null, undefined и булевы значения преобразуются в числа и также запрещены.

1n + 2; // TypeError: Cannot mix BigInt and other types, use explicit conversions
2 + 1n; // TypeError: Cannot mix BigInt and other types, use explicit conversions

Строки имеют приоритет над другими типами, поэтому добавление строки к BigInt приводит к конкатенации строк, а не к TypeError.

"1" + 2n; // "12"

Чтобы выполнить сложение с BigInt и не-BigInt, преобразуйте любой из операндов:

1n + BigInt(2); // 3n
Number(1n) + 2; // 3

Сложение с использованием строк

Если один из операндов является строкой, другой преобразуется в строку, и они конкатенируются:

"foo" + "bar"; // "foobar"
5 + "foo"; // "5foo"
"foo" + false; // "foofalse"
"2" + 2; // "22"

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

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

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

Настольные компьютеры Мобильные устройства Сервер
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на iOS Samsung Internet WebView Android WebView на iOS Bun Deno Node.js
addition
1
12
1
3
1
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/Operators/Addition

Spec-Zone.ru

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