Перейти к основному содержимому
Модуль 2 · Урок 4 из 48/32 в курсе~8 min
Уроки модуля (4/4)

Преобразования типов

Вам все время нужно преобразовать тип значения: value из входные данные HTML поступают в виде строки, даже если они представляют собой число, API возвращает строки в формат, вам необходимо зарегистрировать объект как текст. JS предлагает три семейства преобразований: явные, специализированные парсеры и (чтобы быть избегать) неявные.

Явные преобразования

Они наиболее понятны и должны быть вашими по умолчанию:

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'); // true

parseInt и parseFloat: толерантные парсеры

В отличие от Number(...), parseInt и parseFloat игнорировать нечисловые значения. хвост строки: они останавливаются на первом недопустимом символе.

JS
Number('42px'); // NaN
parseInt('42px'); // 42
parseFloat('3.14em'); // 3.14
parseInt('   12 anni'); // 12
parseInt('ciao12'); // NaN  ← must start with digits

toFixed для форматирования чисел в виде строк

Кратко рассматривается в предыдущем уроке: округляет до N десятичных знаков и возвращает строка.

JS
(3.14159).toFixed(2); // '3.14'
(1).toFixed(2); // '1.00'

Чтобы преобразовать его обратно в number, используйте префикс Number(...) или унарный +:

JS
Number((3.14159).toFixed(2)); // 3.14
+(3.14159).toFixed(2); // 3.14

NaN: значение, которое кусается

NaN («Не число») создается в результате числовых операций, которые завершаются неудачно:

JS
Number('ciao'); // NaN
0 / 0; // NaN
parseInt('xxx'); // NaN

Характеристики:

  • имеет тип 'number' (да, «нечисло» — это число)
  • он не равен самому себе: NaN === NaN равен false
  • для проверки используйте функцию Number.isNaN(x)
JS
const x = Number('ciao');
x === NaN; // false (!)
Number.isNaN(x); // true

Попробуйте это

Упражнение#js.m2.l4.e1
Попыток: 0Загрузка…

Учитывая строку «128,95 евро», извлеките (десятичное) число и округлите его до ближайшего целого числа, вернув его как число. Ожидается: 129.

Загрузка редактора…
Показать подсказку

parseFloat игнорирует «EUR»; .toFixed(0) округляет до целого числа в виде строки; Число(...) преобразуется обратно в число.

Решение доступно после 3 попыток

Обзор упражнения

Упражнение#js.m2.l4.e2
Попыток: 0Загрузка…

Учитывая `n = Number('non un numero')`, напишите одно выражение, которое будет иметь значение true, если результатом будет NaN.

Загрузка редактора…
Показать подсказку

Используйте Number.isNaN, а не n === NaN: NaN не равен самому себе.

Решение доступно после 3 попыток