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