Уроки модуля (4/4)
Преобразования типов
Вам все время нужно преобразовать тип значения: value из
входные данные HTML поступают в виде строки, даже если они представляют собой число, API
возвращает строки в формат, вам необходимо зарегистрировать объект как текст. JS предлагает
три семейства преобразований: явные, специализированные парсеры и (чтобы быть
избегать) неявные.
Явные преобразования
Они наиболее понятны и должны быть вашими по умолчанию:
Number('42'); // 42
Number('3.14'); // 3.14
Number(''); // 0 ← careful
Number(' 10 '); // 10 (spaces are ignored)
Number('ciao'); // NaN ← does not represent a number
String(42); // '42'
String(true); // 'true'
String(null); // 'null'
String(undefined); // 'undefined'
Boolean(1); // true
Boolean(0); // false
Boolean(''); // false
Boolean('abc'); // trueparseInt и parseFloat: толерантные парсеры
В отличие от Number(...), parseInt и parseFloat игнорировать нечисловые значения.
хвост строки: они останавливаются на первом недопустимом символе.
Number('42px'); // NaN
parseInt('42px'); // 42
parseFloat('3.14em'); // 3.14
parseInt(' 12 anni'); // 12
parseInt('ciao12'); // NaN ← must start with digitstoFixed для форматирования чисел в виде строк
Кратко рассматривается в предыдущем уроке: округляет до N десятичных знаков и возвращает строка.
(3.14159).toFixed(2); // '3.14'
(1).toFixed(2); // '1.00'Чтобы преобразовать его обратно в number, используйте префикс Number(...) или унарный
+:
Number((3.14159).toFixed(2)); // 3.14
+(3.14159).toFixed(2); // 3.14NaN: значение, которое кусается
NaN («Не число») создается в результате числовых операций, которые завершаются неудачно:
Number('ciao'); // NaN
0 / 0; // NaN
parseInt('xxx'); // NaNХарактеристики:
- имеет тип
'number'(да, «нечисло» — это число) - он не равен самому себе:
NaN === NaNравенfalse - для проверки используйте функцию
Number.isNaN(x)
const x = Number('ciao');
x === NaN; // false (!)
Number.isNaN(x); // trueПопробуйте это
Учитывая строку «128,95 евро», извлеките (десятичное) число и округлите его до ближайшего целого числа, вернув его как число. Ожидается: 129.
Показать подсказку
parseFloat игнорирует «EUR»; .toFixed(0) округляет до целого числа в виде строки; Число(...) преобразуется обратно в число.
Решение доступно после 3 попыток
Обзор упражнения
Учитывая `n = Number('non un numero')`, напишите одно выражение, которое будет иметь значение true, если результатом будет NaN.
Показать подсказку
Используйте Number.isNaN, а не n === NaN: NaN не равен самому себе.
Решение доступно после 3 попыток