+
+
Основные Принципы Работы Оператора +
+
Для сложения чисел. Для объединения строк.
const price = 20;
const shipping = 3;
const tax = 3;
const total = price + shipping + tax;
console.log(total); // Результат: 26
Пример объединения строк:
const firstName = 'Marty';
const lastName = 'McFly';
const fullName = firstName + ' ' + lastName;
console.log(fullName); // Результат: 'Marty McFly'
Кажется, что оба метода работают корректно. Но что произойдет, если мы сложим два числа в строковом формате?
console.log('2' + '2'); // Результат: '22'
Мы видим, что результат зависит от типа данных. Если оба операнда являются числами, происходит математическое сложение. Однако, если хотя бы один из операндов — строка, происходит конкатенация (объединение строк).
console.log(2 + '2'); // Результат: '22'
+
Реальный Пример: Проблемы С Оператором + в Приложениях
[
{
"id": 23173128,
"title": "Nutella Hazelnut Spread",
"price": 8
},
{
"id": 89123012,
"title": "Oreo Chocolate Sandwich",
"price": 5
}
]
+
reduce
const subtotal = productsInCart
.reduce((total, product) => total + product.price, 0);
Этот код будет работать правильно, пока цены представлены в виде чисел. Но представьте, что API изменилось, и теперь цены передаются как строки:
[
{
"id": 23173128,
"title": "Nutella Hazelnut Spread",
"price": "8" // Теперь цена строка!
},
{
"id": 89123012,
"title": "Oreo Chocolate Sandwich Cookies",
"price": "5"
}
]
Как Избежать Ошибок При Использовании Оператора +
console.log(parseInt('2') + parseInt('2')); // Результат: 4
Исправление примера с интернет-магазином:
const subtotal = productsInCart
.reduce((total, product) => total + parseFloat(product.price), 0);
toString()
const prefix = 777;
const suffix = 888;
const result = prefix.toString() + suffix.toString();
console.log(result); // Результат: '777888'
Использование шаблонных строк:
const prefix = 777;
const suffix = 888;
const result = `${prefix}${suffix}`;
console.log(result); // Результат: '777888'
Заключение
+
Для чисел используйте методы parseInt()
, parseFloat()
или Number()
. Для строк используйте toString()
или шаблонные строки.