21 вересня 2023 р.

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

Здебільшого оператори та функції автоматично перетворюють значення, які їм надаються, на потрібний тип.

Наприклад, alert автоматично перетворює будь-яке значення в рядок, щоби показати його. Математичні операції перетворюють значення на числа.

Є також випадки, коли нам необхідно явно перетворити значення на очікуваний тип.

Поки що не говоримо про об’єкти

У цьому розділі ми не будемо охоплювати об’єкти. Поки що ми поговоримо тільки про примітиви.

Пізніше, після ознайомлення з об’єктами, ми розглянемо їхнє перетворення в розділі Перетворення об’єктів в примітиви.

Перетворення на рядок

Перетворення на рядок відбувається, коли нам потрібне значення у формі рядка.

Наприклад, alert(value) робить це, щоби показати значення.

Також ми можемо викликати функцію String(value) для перетворення значення в рядок:

let value = true;
alert(typeof value); // boolean

value = String(value); // тепер value - це рядок "true"
alert(typeof value); // string

Перетворення рядків здебільшого очевидне. false стає "false", null стає "null" тощо.

Перетворення на число

Перетворення на числа відбувається в математичних функціях і виразах автоматично.

Наприклад, коли ділення / застосовується до нечислових значень.

alert( "6" / "2" ); // 3, рядки перетворюються на числа

Ми можемо використовувати функцію Number(value) для явного перетворення value на число:

let str = "123";
alert(typeof str); // string

let num = Number(str); // стає числом 123

alert(typeof num); // number

Явне перетворення зазвичай потрібно, коли ми читаємо значення з джерела на основі рядка, подібно текстовій формі, але очікуємо, що буде введено число.

Якщо рядок не є дійсним числом, результатом такого перетворення є NaN. Наприклад:

let age = Number("довільний рядок замість числа");

alert(age); // NaN, помилка перетворення

Правила перетворення на числа:

Значення Результат
undefined NaN
null 0
true та false 1 та 0
string Пробільні символи (пробіли, символи табуляції \t, символи нового рядку \n тощо) на початку та з кінця видаляються. Якщо рядок, що залишився в результаті, порожній, то результатом є 0. В іншому випадку число “читається” з рядка. Помилка дає NaN.

Приклади:

alert( Number("   123   ") ); // 123
alert( Number("123z") );      // NaN (помилка читання числа на місці символу "z")
alert( Number(true) );        // 1
alert( Number(false) );       // 0

Зверніть увагу, що null та undefined тут поводяться по-різному: null стає нулем, а undefined стає NaN.

Більшість математичних операторів також виконують такі перетворення. Ми розглянемо їх в наступному розділі.

Перетворення на булевий тип

Булеве перетворення є найпростішим.

Воно відбувається в логічних операціях (пізніше ми познайомимося з умовними перевірками та іншими подібними конструкціями), але також може бути виконане явно за допомогою виклику Boolean(value).

Правила перетворення:

  • Значення, які інтуїтивно “порожні”, такі як 0, порожній рядок, null, undefined та NaN, стають false.
  • Інші значення стають true.

Наприклад:

alert( Boolean(1) ); // true
alert( Boolean(0) ); // false

alert( Boolean("вітаю") ); // true
alert( Boolean("") ); // false
Зверніть увагу: рядок із нулем "0" є true

Деякі мови (а саме PHP) розглядають "0" як false. Але у JavaScript непустий рядок завжди true.

alert( Boolean("0") ); // true
alert( Boolean(" ") ); // пробіли, також true (будь-які непусті рядки є true)

Підсумки

Три найпоширеніші перетворення типів — це перетворення на рядок, на число та на булевий тип.

Перетворення на рядок – Відбувається, коли ми щось виводимо. Може бути виконане за допомогою String(value). Перетворення на рядок звичайно очевидне для примітивних значень.

Перетворення на число – Відбувається в математичних операціях. Може бути виконане з Number(value).

Перетворення дотримується правил:

Значення Результат
undefined NaN
null 0
true / false 1 / 0
string Рядок читається “як є”, пробільні символи (пробіли, символи табуляції \t, символи нового рядку \n тощо) з обох сторін ігноруються. Пустий рядок стає 0. Помилка дає NaN.

Перетворення на булевий тип – Відбувається в логічних операціях. Може виконуватися за допомогою Boolean(value).

Дотримується правил:

Значення Результат
0, null, undefined, NaN, "" false
будь-які інші значення true

Більшість із цих правил легко зрозуміти й запам’ятати. Примітними винятками, де люди зазвичай роблять помилки, є:

  • undefined є NaN як число, а не 0.
  • "0" і рядки, що мають тільки пробіли, такі як " ", є true як булеві значення.

Об’єкти тут не охоплені. Ми повернемося до них пізніше в розділі Перетворення об’єктів в примітиви, який присвячений виключно об’єктам, після того, як ми дізнаємося про більш базові речі в JavaScript.

Навчальна карта