Преобразование типов
Часто значение приходит не того типа, который нужен: возраст из поля формы — строкой, число нужно вывести как текст. Превращение значения одного типа в другой называют преобразованием типов.
Строка в число
Функция Number() превращает строку в число. После этого с ним можно считать:
console.log(Number('42') + 1); // 43Если строку нельзя прочитать как число, получится NaN — «не число»:
console.log(Number('сорок')); // NaNparseInt и parseFloat
Number() строг: любые лишние символы дают NaN. Функции parseInt() и parseFloat() читают число с начала строки и останавливаются на первом неподходящем символе:
console.log(parseInt('12px')); // 12
console.log(parseFloat('3.5 кг')); // 3.5
console.log(Number('12px')); // NaNparseInt() возвращает целое число, а parseFloat() сохраняет дробную часть. Они удобны, когда к числу приписаны единицы измерения.
Число в строку
Функция String() превращает любое значение в строку. Тот же результат даёт метод toString():
console.log(String(42) + 1); // 421Теперь + склеивает, а не складывает: '42' + 1 даёт '421'.
Логическое значение
Функция Boolean() отвечает на вопрос, считается ли значение истинным. Ложными считаются всего шесть значений: false, 0, пустая строка '', null, undefined и NaN. Всё остальное — истина:
console.log(Boolean(0)); // false
console.log(Boolean('0')); // true
console.log(Boolean('текст')); // trueСтрока '0' истинна: она не пустая, внутри есть символ.
Неявное преобразование
Иногда JavaScript преобразует типы сам, без вашей просьбы, — это неявное преобразование. Операторы -, * и / превращают строки в числа, а + при строке превращает число в строку:
console.log('6' * '2'); // 12
console.log('6' + 2); // 62Такой код легко понять неправильно, поэтому лучше преобразовывать типы явно — через Number() и String().
Частая ошибка
Пустая строка и строка из пробелов превращаются не в NaN, а в ноль. Поэтому пустое поле формы незаметно превращается в число 0:
console.log(Number('')); // 0
console.log(Number(' ')); // 0Если пустое значение должно считаться ошибкой, сначала проверьте, что строка не пустая, и только потом преобразуйте её.