Сложение (+)
Базовый уровень Широко доступно
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с июля 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"
Спецификации
Совместимость с браузерами
| Настольные компьютеры | Мобильные устройства | Сервер | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 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