Типи даних JavaScript
Усі використовувані дані в javascript мають певний тип. У JavaScript є вісім типів даних:
- String: представляє рядок
- Number: представляє числове значення
- BigInt: призначений для представлення дуже великих цілих чисел
- Boolean: представляє логічне значення true або false
- Undefined: представляє одне спеціальне значення - undefined і вказує, що значення не встановлено
- Null: представляє одне спеціальне значення - null і вказує на відсутність значення
- Symbol: представляє унікальне значення, яке часто застосовується для звернення до властивостей складних об'єктів
- Object: представляє комплексний об'єкт
Перші сім типів представляють примітивні типи даних. Останній тип - Object представляє складний, комплексний тип даних, який складається зі значень примітивних типів або інших об'єктів. Розглянемо основні примітивні типи даних.
Числові дані
Number
Тип Number представляє числа в JavaScript, які можуть бути цілими або дробовими:
- Цілі числа, наприклад, 35. Ми можемо використовувати як позитивні, так і негативні числа. Діапазон використовуваних чисел: від -253 до 253
- Дробові числа (числа з плаваючою крапкою), наприклад, 3.5575. Знову ж таки можна використовувати як позитивні, так і негативні числа. Для чисел із плаваючою крапкою використовується той самий діапазон: від -253 до 253
Наприклад:
let x = 45;
let y = 23.897;
Як роздільник між цілою і дробовою частинами, як і в інших мовах програмування, використовується крапка.
Тип BigInt
Тип BigInt додано в останніх стандартах JavaScript для представлення дуже великих цілих чисел, які виходять за межі діапазону типу number. Це не означає, що ми не можемо зовсім працювати з великими числами за допомогою типу number, але робота з ними у випадку з типом number буде пов'язана з проблемами. Розглянемо невеликий приклад:
let num = 9007199254740991
console.log(num); // 9007199254740991
console.log(num + 1); // 9007199254740992
console.log(num + 2); // 9007199254740992
Тут змінній num присвоюється максимальне значення. І далі додаємо до неї деякі значення і виводимо на консоль результат. І результати можуть нас збентежити, особливо в разі додавання числа 2.
Для визначення числа як значення типу BigInt у кінці числа додається суфікс n:
let dimension = 19007n;
const value = 2545n;
Наприклад, змінимо з попереднього прикладу тип number на bigint:
let num = 9007199254740991n
console.log(num); // 9007199254740991n
console.log(num + 1n); // 9007199254740992n
console.log(num + 2n); // 9007199254740993n
console.log(num + 3n); // 9007199254740994n
Тип Boolean
Тип Boolean представляє булеві або логічні значення true (вірно) і false (хибно):
let isAlive = true;
let isDead = false;
Рядки String
Тип String представляє рядки. Для визначення рядків застосовуються лапки, причому, можна використовувати як подвійні, так одинарні, так і косі лапки. Єдине обмеження: тип лапок, що закривають, має бути той самий, що й тип лапок, що відкривають, тобто або обидві подвійні, або обидві одинарні.
let user = "Tom";
let company = 'Microsoft';
let language = `JavaScript`;
console.log(user);
console.log(company);
console.log(language);
Якщо всередині рядка зустрічаються лапки, то ми їх маємо екранувати слешем. Наприклад, нехай у нас є текст "Бюро "Роги і копита"". Тепер екрануємо лапки:
let company = "Бюро \"Рога і копита\"";
Також ми можемо всередині стоки використовувати інший тип лапок:
let company1 = "Бюро 'Роги і копита'";
let company2 = 'Бюро "Роги і копита"'';
Інтерполяція
Використання косих лапок дає нам змогу застосовувати такий прийом як інтерполяція - вбудовувати дані в рядок. Наприклад:
let user = "Tom";
let text = `Ім'я: ${користувач}`;
console.log(text); // Name: Tom
Для вбудовування значень виразів (наприклад, значень інших змінних і констант) у рядок перед виразом ставлять знак долара $, після якого у фігурних дужках вказують вираз. Так, у прикладі вище ${user} означає, що в цьому місці рядка треба вбудувати значення змінної user.
Подібним чином можна вбудовувати і більшу кількість даних:
let user = "Tom";
let age = 37;
let isMarried = false;
let text = `Ім'я: ${користувач} Вік: ${вік} Одружений: ${isMarried}`;
console.log(text); // Ім'я: Том Вік: 37 IsMarried: false
null і undefined
undefined вказує, що значення не визначено або не встановлено. Наприклад, коли ми тільки визначаємо змінну без присвоєння їй початкового значення, вона представляє тип undefined:
let isAlive;
console.log(isAlive); // виведе undefined
Присвоєння значення null означає, що у змінної відсутнє значення:
let isAlive;
console.log(isAlive); // невизначений
isAlive = null;
console.log(isAlive); // null
isAlive = undefined; // знову встановимо тип undefined
console.log(isAlive); // undefined
object
Тип object представляє складний об'єкт. Найпростіше визначення об'єкта представляють фігурні дужки:
let user = {};
Об'єкт може мати різні властивості та методи:
const user = {ім'я: "Tom", age:24};
console.log(user.name);
У цьому випадку об'єкт називається user, і він має дві властивості: name і age. Це короткий опис об'єктів, більш детально об'єкти ми розглянемо в наступних статтях.
Слабка/динамічна типізація
JavaScript є мовою зі слабкою та динамічною типізацією. Це означає, що змінні можуть динамічно змінювати тип. Наприклад:
let id; // тип undefined
console.log(id);
id = 45; // тип number
console.log(id);
id = "45"; // тип string
console.log(id);
Незважаючи на те, що в другому і третьому випадку консоль виведе нам число 45, але в другому випадку змінна id представлятиме число, а в третьому випадку - рядок.
Це важливий момент, який треба враховувати і від якого залежить поведінка змінної в програмі:
let a = 45; // тип number
let b = a + 5;
console.log(b); // 50
a = "45"; // тип string
let c = a + 5
console.log(c); // 455
Вище в обох випадках до змінної a застосовується операція додавання (+). Але в першому випадку a представляє число, тому результатом операції a + 5 буде число 50.
У другому випадку a представляє рядок. Але операція додавання між рядком і числом 5 неможлива. Тому число 5 буде перетворюватися до рядка, і відбуватиметься операція об'єднання рядків. Тому в другому випадку результатом виразу a + 5 буде рядок "455".
Оператор typeof
За допомогою оператора typeof можна отримати тип змінної:
let id;
console.log(typeof id); // невизначений
id = 45;
console.log(typeof id); // число
id = 45n;
console.log(typeof id); // bigint
id = "45";
console.log(typeof id); // string
Варто зазначити, що для значення null оператор typeof повертає значення "object", незважаючи на те, що згідно зі специфікацією JavaScript значення null представляє окремий тип.