Ми хочемо зробити цей проєкт з відкритим кодом доступним для людей у всьому світі.

Допоможіть перекласти цей підручник вашою мовою!

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.

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

Коментарі

прочитайте це, перш ніж коментувати…
  • Якщо у вас Ñ” пропозиції, щодо покращення підручника, будь ласка, створіть обговорення на GitHub або одразу створіть запит на злиття зі змінами.
  • Якщо ви не можете зрозуміти щось у статті, спробуйте покращити Ñ—Ñ—, будь ласка.
  • Щоб вставити код, використовуйте тег <code>, для кількох рядків – обгорніть Ñ—Ñ… тегом <pre>, для понад 10 рядків – використовуйте пісочницю (plnkr, jsbin, codepen…)