Модульні уроки (4/4)
Перетворення типів
Весь час вам потрібно трансформувати тип значення: value з
введення HTML надходить як рядок, навіть якщо воно представляє число, API
повертає рядки у формат, вам потрібно зареєструвати об’єкт як текст. Пропозиції JS
три сімейства перетворень: явні, виділені аналізатори та (to be
уникати) неявні.
Явні перетворення
Це найчіткіші варіанти, і вони повинні використовуватися за умовчанням:
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 десяткових знаків і повертає a рядок.
(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 EUR", витягніть (десяткове) число та округліть його до найближчого цілого, повертаючи його як число. Очікується: 129.
Показати підказку
parseFloat ігнорує 'EUR'; .toFixed(0) округлює до цілого числа у вигляді рядка; Number(...) перетворює назад на число.
Рішення доступне після 3 спроб
Повторна вправа
Враховуючи `n = Number('non un numero')`, напишіть єдиний вираз, який має значення true, якщо результат NaN.
Показати підказку
Використовуйте Number.isNaN, а не n === NaN: NaN не дорівнює самому собі.
Рішення доступне після 3 спроб