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

Перетворення типів

Весь час вам потрібно трансформувати тип значення: value з введення HTML надходить як рядок, навіть якщо воно представляє число, API повертає рядки у формат, вам потрібно зареєструвати об’єкт як текст. Пропозиції JS три сімейства перетворень: явні, виділені аналізатори та (to be уникати) неявні.

Явні перетворення

Це найчіткіші варіанти, і вони повинні використовуватися за умовчанням:

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 десяткових знаків і повертає a рядок.

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 EUR", витягніть (десяткове) число та округліть його до найближчого цілого, повертаючи його як число. Очікується: 129.

Завантаження редактора…
Показати підказку

parseFloat ігнорує 'EUR'; .toFixed(0) округлює до цілого числа у вигляді рядка; Number(...) перетворює назад на число.

Рішення доступне після 3 спроб

Повторна вправа

вправи#js.m2.l4.e2
Спроби: 0Завантаження…

Враховуючи `n = Number('non un numero')`, напишіть єдиний вираз, який має значення true, якщо результат NaN.

Завантаження редактора…
Показати підказку

Використовуйте Number.isNaN, а не n === NaN: NaN не дорівнює самому собі.

Рішення доступне після 3 спроб