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