Здебільшого оператори та функції автоматично перетворюють значення, які їм надаються, на потрібний тип.
Наприклад, 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.
Коментарі
<code>, для кількох рядків – обгорніть їх тегом<pre>, для понад 10 рядків – використовуйте пісочницю (plnkr, jsbin, codepen…)