Типи даних 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 представляє окремий тип.