У JavaScript значення можуть бути різних типів. Змінити тип змінної можна за допомогою явного перетворення типу. Крім того, JavaScript також виконує приведення типу (неявне перетворення типу), коли цього вимагає контекст.
JavaScript не має конструкції для приведення до (іншого) типу, як багато інших мов, але натомість можна скористатися деякими вбудованими засобами.
Зокрема, Boolean, Number і String можна використовувати як функції, щоб перетворити значення на відповідний тип.
За допомогою Boolean(value) можна перетворити будь-яке значення на булеве значення (англ. Boolean).
Існує фіксований набір значень, так званих хибних, які перетворюються на false.
Найважливіше: false, 0, порожній рядок тексту (англ. string), null, undefined та NaN є хибними.
Для всіх інших значень Boolean повертає true.
Такі значення називають правдивими.
Boolean(-1);
// => true
Boolean(0);
// => false
Boolean(' ');
// => true
Boolean('');
// => false
Зауважмо, що через описані правила '0', 'false', [] та {} є правдивими у JavaScript.
Number(value) можна використати, щоб перетворити значення на число.
Пробільні символи на початку та в кінці рядка тексту ігноруються, а порожній рядок тексту перетворюється на 0.
Якщо спробувати перетворити непримітивне значення або рядок тексту, що не є числом, результатом буде NaN (Не число).
Number(' -12.34 ');
// => -12.34
Number('1,2');
// => NaN
Number('');
// => 0
Number({ num: 123 });
// => NaN
За допомогою String(value) можна перетворити значення на рядок тексту.
Для примітивних значень результат буде таким, як ми й очікуємо.
String(12.34);
// => '12.34'
String(false);
// => 'false'
String(null);
// => 'null'
String(undefined);
// => 'undefined'
Для масивів функція String застосує перетворення на рядок тексту до кожного елемента й зʼєднає результати комою.
Можна також самостійно застосувати метод join, наприклад, щоб налаштувати роздільник.
Зауважмо, що в цих випадках null та undefined перетворюються на порожній рядок тексту.
String([42, null, true, 'abc']);
// => '42,,true,abc'
Для обʼєктів String типово повертає неінформативний текст.
String({ key: 'value' });
// => '[object Object]'
У певних контекстах JavaScript автоматично перетворює значення на інший тип даних, перш ніж виконати інструкцію. Це неявне перетворення називають приведенням типу.
Коли небулеве значення використовується в булевому контексті, JavaScript застосовує ті самі правила, що й функція Boolean, щоб неявно перетворити це значення.
Приведення до булевого значення зазвичай відбувається для
?
!
&& (логічне і) та || (логічне або) (результат виразу є одним з операндів, не обовʼязково булевим значенням)const num = 0;
if (num) {
// this block is NOT executed because 0 is falsy
}
Якщо оператор додавання + застосовується до примітивних значень і один з операндів є рядком тексту, інший теж буде приведений до рядка тексту.
Логіка перетворення така сама, як під час використання функції String.
Після цього два рядки тексту зʼєднуються.
let name;
'hello ' + name;
// => 'hello undefined'
Багато операторів приводить операнди до чисел (за потреби) згідно з логікою функції Number, поясненою вище.
+ (якщо не задіяно рядок тексту), -, *, /, %, **
+, -
>, >=, <, <=
|, &, ^, ~
Звернімося до списку операторів MDN, щоб дізнатися більше про будь-який з них.
Щоб уникати помилок, добре завжди явно викликати Number перед застосуванням цих операторів.
Наш друг Коjo дуже любить числа. У нього є невеликий сайт під назвою «fun-with-numbers». Коjo не дуже добре володіє програмуванням, тож він попросив нас про допомогу.
Ми створимо дві допоміжні функції для нових ігор із числами на сайті Коjo і третю, щоб перевіряти деякі вхідні дані, які може ввести користувач.
Одна з ігор на сайті Коjo має вигляд грального автомата, який показує дві групи коліс із цифрами. Кожна група цифр представляє число. Для ігрової механіки Коjo потрібно знати суму цих двох чисел.
Напишіть функцію twoSum, яка приймає два масиви як параметри.
Кожен масив складається з одного або кількох чисел від 0 до 9.
Функція має інтерпретувати кожен масив як число й повернути суму цих двох чисел.
twoSum([1, 2, 3], [0, 7]);
//=> 130
// [1, 2, 3] represents 123 and [0, 7] represents 7.
// 123 + 7 = 130
Ще одна гра на сайті - невелика вікторина під назвою «Щасливі числа». Користувач може ввести число й побачити, чи належить воно до якоїсь таємної послідовності або закономірності. Послідовність або закономірність «щасливих чисел» змінюється щомісяця, і кожен користувач має лише обмежену кількість спроб, щоб її вгадати.
Щасливими числами цього місяця мають бути числа-паліндроми. Числа-паліндроми залишаються тими самими, якщо записати цифри у зворотному порядку.
Реалізуйте нову функцію luckyNumber, яка приймає число як параметр.
Функція має повернути true, якщо число є паліндромом, і false в іншому разі.
Вхідне число завжди буде додатним цілим числом.
luckyNumber(1441);
//=> true
luckyNumber(123);
//=> false
У різних місцях сайту є поля введення, де користувачі можуть вводити числа й натискати кнопку, щоб викликати якусь дію. Коjo хоче покращити досвід користування своїм сайтом. Він хоче показувати повідомлення про помилку, якщо користувач натискає кнопку, а поле містить некоректне вхідне значення.
Ось трохи більше інформації про те, як надається значення поля введення.
undefined або null.Напишіть функцію errorMessage, яка приймає введені користувачем дані як параметр.
Якщо користувач не надав жодних вхідних даних, errorMessage має повернути 'Required field'.
Якщо вхідні дані не є числом, відмінним від нуля (згідно з правилами перетворення JavaScript), потрібно повернути 'Must be a number besides 0'.
В усіх інших випадках можемо вважати вхідні дані коректними, і тоді поверненим значенням має бути порожній рядок тексту.
errorMessage('123');
// => ''
errorMessage('');
// => 'Required field'
errorMessage('abc');
// => 'Must be a number besides 0'
Зареєструйтеся на Exercism, щоб вивчати й опановувати JavaScript, а також 37 концепцій159 вправ та справжнє наставництво від людей, і все це безкоштовно.