Как перевести строку в число
console.log(Number("42"));
console.log(Number("3.14"));
console.log(parseInt("42px", 10));
console.log(parseFloat("3.5 кг"));
console.log(+"7" + 1);42
3.14
42
3.5
8Number(строка)— переводит строку целиком. Если в ней есть что-то кроме числа (и пробелов по краям), результат —NaN.parseInt(строка, 10)— читает целое число с начала строки и останавливается на первом неподходящем символе. Второй аргумент — система счисления, для обычных чисел10.parseFloat(строка)— то же, но для дробных чисел.+строка— короткая записьNumber:+"7"— это7.
Чем они отличаются
console.log(Number("12px"));
console.log(parseInt("12px", 10));
console.log(Number(""));
console.log(parseInt("", 10));
console.log(Number(" 5 "));
console.log(parseInt("3.99", 10));NaN
12
0
NaN
5
3| Строка | Number | parseInt(…, 10) | parseFloat |
|---|---|---|---|
"42" | 42 | 42 | 42 |
"3.99" | 3.99 | 3 | 3.99 |
"12px" | NaN | 12 | 12 |
"" | 0 | NaN | NaN |
"abc" | NaN | NaN | NaN |
Выбор простой: для значения, которое должно быть числом целиком (поле ввода, данные из файла), — Number. Для строк вида "12px", где число стоит в начале, — parseInt или parseFloat.
Ловушка Number(""): пустая строка даёт 0, а не NaN. Если пользователь ничего не ввёл, а программа приняла это за ноль, проверяйте пустую строку отдельно.
Почему вместо сложения склеивается
Значение поля ввода (input.value), ответ prompt(), параметры из адреса страницы — всегда строки. + со строками склеивает:
const a = "2";
const b = "3";
console.log(a + b);
console.log(Number(a) + Number(b));23
5Запятая вместо точки
В JavaScript дробная часть отделяется точкой. Число с запятой, как его привычно вводят по-русски, Number не поймёт, а parseFloat прочитает только до запятой:
const input = "3,75";
console.log(Number(input));
console.log(parseFloat(input));
console.log(Number(input.replace(",", ".")));NaN
3
3.75Проверить, что получилось число
NaN не равен ничему, даже себе, поэтому x === NaN всегда false. Проверка — Number.isNaN:
const value = Number("abc");
if (Number.isNaN(value)) {
console.log("Это не число");
}Это не числоЕсли важно, чтобы число было ещё и конечным (не Infinity), подойдёт Number.isFinite(value).
Обратно: число в строку
String(42), (42).toString() или шаблонная строка — все дают "42". Для вывода с нужным числом знаков после точки — toFixed, см. справку Как округлить число.