Рубріки: Front-endОснови

Типи даних у JavaScript

Дмитро Сімагін

Мова програмування JavaScript широко застосовується при розробці не тільки клієнтських, але й серверних програм. Однією з головних характеристик JavaScript є динамічна типізація, яка передбачає, що значення можуть змінювати свій тип під час виконання програми. У цій публікації ми розглянемо типи даних у JavaScript та їхні різновидності: примітивні та об’єктні.

Типи даних js

У мові JavaScript є наступні типи даних:

Примітивні типи:

  • String — рядок
  • Number — число
  • BigInt — велике число (для значень, що перевищують Number.MAX_SAFE_INTEGER)
  • Boolean — булеве значення (true або false)
  • Undefined — невизначене значення (змінна оголошена, але не має значення)
  • Null — відсутність значення або об’єкта (спеціальне “порожнє” значення)
  • Symbol — унікальний ідентифікатор, корисний для створення унікальних ключів об’єктів

Об’єктні типи:

  • Object — об’єкт, який містить пари «ключ-значення» (словар)
  • Array — масив, упорядкована колекція значень
  • Function — функція, блок коду, що виконує певну дію
  • Map — карта, колекція пар “ключ-значення” з підтримкою будь-якого типу ключів
  • Set — множина, колекція унікальних значень
  • Date — дата та час
  • RegExp — регулярний вираз, шаблон для роботи з рядками

Примітивні значення

Примітивні значення — це базові типи даних, які не є об’єктами і які зберігаються як окремі значення, а не як посилання на об’єкти. Кожне примітивне значення є незмінним, тобто після його створення значення вже не можна змінити. У мові JavaScript існує 7 примітивних типів даних:

1. String

String — це тип даних для представлення текстових даних. Рядки можуть бути створені за допомогою одинарних (‘ ‘), подвійних (” “), або шаблонних лапок (` `). Рядки є незмінними, тобто будь-яка операція над рядком створює новий рядок.

const greeting = "Hello, world!";
const name = `JavaScript`; // Шаблонний рядок
const message = `Hello, ${name}!`; // Інтерполяція змінних

 

2. Number

Number використовується для представлення чисел (як цілих, так і дробових). JavaScript не має окремих типів для цілих чисел і чисел з плаваючою комою, тому всі числа представлені типом Number.

Спеціальні значення:

  • NaN (Not-a-Number) — результат некоректних математичних операцій.
  • Infinity і -Infinity — результат ділення на нуль.
const age = 25;
const price = 19.99;
const negative = -5;

 

3. BigInt

Це тип для представлення дуже великих цілих чисел, більших за Number.MAX_SAFE_INTEGER. BigInt створюється шляхом додавання n до числа:

const largeNumber = 12345678901234567890n;

 

4. Boolean

Булевий тип (Boolean) може мати одне з двох значень: true або false. Як правило, його використовують для умовних перевірок.

const isJavaScriptFun = true;
const isWinterCold = false;

 

5. Undefined

Тип undefined присвоюється змінній, яка була оголошена, але не отримала жодного значення. Це означає, що змінна існує, але значення їй не призначено.

let user;
console.log(user); // undefined

 

6. Null

Null — це спеціальне значення, яке вказує на відсутність об’єкта або значення. null часто використовують для ініціалізації змінної, яка повинна містити об’єкт, але на даний момент порожня.

const emptyValue = null;

 

7. Symbol

Symbol — це унікальний ідентифікатор, який завжди має унікальність навіть при однаковому значенні. Symbol часто використовують для створення неповторних ключів в об’єктах, які не можуть бути випадково перезаписані.

const id = Symbol("id");

 

Примітивні значення в JavaScript є основою для зберігання даних. Вони зберігаються безпосередньо в змінній та є незмінними, тобто не можуть бути змінені після створення. Також вони можуть створюватися та використовуватися без створення об’єктів.

Об’єкти

Об’єкти в JavaScript є складними структурами, які мають властивості містити кілька значень. Вони можуть зберігати різні типи даних разом. До об’єктних типів відносяться також масиви, функції та спеціальні об’єктні типи, такі як Map і Set.

Основні об’єктні типи:

Об’єкти в JavaScript — це складні структури даних, які дозволяють зберігати колекції різних значень та організовувати дані за допомогою пар «ключ-значення». Об’єкти є фундаментальними поняттями для мови JavaScript — практично майже все в JavaScript може вважатись об’єктом, включно з масивами, функціями та багатьма базовими структурами.

Як створити об’єкт в JavaScript

Об’єкт у JavaScript можна створити за допомогою фігурних дужок {}, всередині яких вказуються пари ключ-значення, розділені комами. Ключі можуть бути рядками або значеннями Symbol. Значення можуть мати будь-який тип (у тому числі функції). Давайте подивимось це на прикладі коду:

const user = {
  name: "Alice",
  age: 30,
  isMember: true
};

 

Як отримати доступ до властивостей об’єкта

Доступ до властивостей об’єкта можна отримати через крапку (.). Такий запис використовується, якщо назва властивості відома і відповідає стандартним іменувальним правилам (без пробілів та спецсимволів).

console.log(user.name); // Alice

 

Також доступ можна отримати через квадратні дужки ([]): Цей метод дозволяє доступ до властивостей, які можуть мати динамічні імена або містити спецсимволи та пробіли.

const property = "age";
console.log(user[property]); // 30

 

Додавання, зміна та видалення властивостей

Ви можете додати нову властивість до об’єкта. Треба лише присвоїти значення новому ключу.

user.email = "alice@example.com";

 

Щоб змінити вже існуючі властивості об’єкта, виконуються аналогічні дії.

user.age = 21;

 

Щоб видалити властивості об’єкта, треба застосувати оператор delete.

delete user.isMember;

 

Перебір властивостей об’єкта

Щоб перебрати всі властивості об’єкта, можна використовувати цикл for…in, або скористатися методами Object.keys(), Object.values(), Object.entries().

Приклад для for…in:

for (let key in user) {
  console.log(key, user[key]);
}

 

Приклад для Object.keys(). Тут він повертає масив ключів об’єкта.

console.log(Object.keys(user)); // ['name', 'age', 'email']

 

Приклад для Object.values(), де він повертає масив значень об’єкта.

console.log(Object.values(user)); // ['Alice', 21, 'alice@example.com']

 

Приклад для Object.entries(), в якому повертаєся масив пар [ключ, значення].

console.log(Object.entries(user)); // [['name', 'Alice'], ['age', 21], ['email', 'alice@example.com']]

 

Вкладені об’єкти

Об’єкти можуть містити в собі вкладені об’єкти. Це дозволяє створювати складні структури даних.

const user = {
  name: "Alice",
  address: {
    city: "New York",
    zip: "10001"
  }
};
console.log(user.address.city); // New York

 

Методи об’єктів

Ті функції в JavaScript, які є властивостями об’єкта, називають методами. Вони можуть виконувати певні операції на об’єкті.

const calculator = {
  sum(a, b) {
    return a + b;
  },
  multiply(a, b) {
    return a * b;
  }
};
console.log(calculator.sum(3, 4)); // 7
console.log(calculator.multiply(3, 4)); // 12

 

this у контексті об’єкта

Ключове слово this у методі об’єкта посилається на сам об’єкт. Це дозволяє методам взаємодіяти з іншими властивостями об’єкта.

const person = {
  name: "Alice",
  greet() {
    console.log(`Hello, my name is ${this.name}!`);
  }
};
person.greet(); // Hello, my name is Alice!

 

Створення об’єктів за допомогою Object.create()

Метод Object.create() дозволяє створювати нові об’єкти на основі існуючого об’єкта-прототипа.

const prototypeUser = {
  greet() {
    console.log(`Hello, I am ${this.name}`);
  }
};

const newUser = Object.create(prototypeUser);
newUser.name = "Alice";
newUser.greet(); // Hello, I am Alice

 

Класи як спосіб створення об’єктів

В синтаксисі JavaScript класи використовуються для створення шаблонів об’єктів. Це дозволяє створювати багато екземплярів об’єктів із однаковою структурою.

class User {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }

  greet() {
    console.log(`Hi, I'm ${this.name}!`);
  }
}

const user1 = new User("Alice", 20);
user1.greet(); // Hi, I'm Alice!

 

Як бачите, об’єкти в JavaScript є доволі гнучкою структурою, яка виконує дії для зберігання та обробки даних. Вони можуть містити вкладені об’єкти та методи, які дозволяють створювати складні структури й динамічні додатки.

Визначення типів даних оператором typeof

В мові JavaScript існує оператор typeof, який дозволяє визначити тип значення або змінної. Цей оператор дуже корисний при потребі перевірити типи даних, якщо вони можуть змінюватися під час виконання програми. 

Як працює typeof

typeof — це оператор, який повертає тип даних у вигляді рядка. Його можна використовувати з будь-яким типом значення, і результат завжди буде рядком, який описує тип даних цього значення.

console.log(typeof 42); // "number"
console.log(typeof "Hello"); // "string"
console.log(typeof true); // "boolean"
console.log(typeof undefined); // "undefined"

 

Як використовувати typeof

Синтаксис оператора typeof дуже простий. Його можна застосовувати до змінних, літералів, функцій та виразів:

Змінна:

let age = 21;
console.log(typeof age); // "number"

 

Літерал:

console.log(typeof "text"); // "string"
console.log(typeof 100); // "number"

 

Функція:

function greet() {
  return "Hello!";
}
console.log(typeof greet); // "function"

 

Вираз:

console.log(typeof (2 + 2)); // "number"

 

Особливості та обмеження typeof

Оператор typeof корисний для програміста, але він має кілька особливостей, які можуть заплутати новачків.

  1. typeof null

Результат typeof null є “object”, хоча це і примітивний тип. Це багаторічна помилка, яка існує через технічні причини та сумісність зі старими версіями JavaScript. null є окремим типом даних, який вказує на відсутність об’єкта, але typeof все одно повертає “object”.

console.log(typeof null); // "object"

 

  1. typeof для масивів

Масиви в JavaScript є об’єктами, тому typeof для масиву також поверне “object”. Це може бути неочікуваним. Для перевірки, чи є значення масивом, краще використовувати метод Array.isArray().

const arr = [1, 2, 3];
console.log(typeof arr); // "object"
console.log(Array.isArray(arr)); // true

 

  1. typeof для функцій

Хоча функції є об’єктами, typeof для функції поверне “function”. Це зручно для перевірки, чи є значення функцією.

function example() {}
console.log(typeof example); // "function"

 

  1. typeof для BigInt

Тип BigInt був доданий у ECMAScript 2020 для представлення великих цілих чисел. Оператор typeof повертає “bigint” для значень цього типу.

const bigIntValue = 12345678901234567890n;
console.log(typeof bigIntValue); // "bigint"

 

Приклади використання typeof для перевірки типів даних

Оператор typeof часто використовують для динамічної перевірки типу даних у коді. Наприклад:

function processData(data) {
  if (typeof data === "string") {
    console.log("Це рядок:", data);
  } else if (typeof data === "number") {
    console.log("Це число:", data);
  } else if (typeof data === "boolean") {
    console.log("Це булеве значення:", data);
  } else {
    console.log("Тип невідомий");
  }
}

processData("Hello");   // Це рядок: Hello
processData(42);        // Це число: 42
processData(true);      // Це булеве значення: true

 

Перевірка на null та Array за допомогою typeof

Через особливості typeof, для перевірки значень null та масивів краще використовувати інші методи.

Перевірка на null:

let value = null;
console.log(value === null); // true

 

Перевірка на масив:

let items = [1, 2, 3];
console.log(Array.isArray(items)); // true

 

Оператор typeof є дуже корисним інструментом при перевірці типів даних у JavaScript, але він має обмеження та особливості, які варто враховувати. Для складніших випадків, таких як перевірка на null, масиви або інші спеціальні об’єкти, краще використовувати додаткові методи, такі як Array.isArray() та порівняння з null.

Висновок

Розуміння типів даних у JavaScript є базою для написання коректного та ефективного коду в JavaScript. Від примітивних типів, таких як Number, String та Boolean, до об’єктних структур, таких як Object та Array, різноманіття типів дозволяє ефективно зберігати та обробляти дані. Окрім того, вміння використовувати перетворення типів допомагає розробнику уникнути помилок і забезпечити відповідність значень очікуваним типам.

 

Останні статті

Швейцарська компанія скуповує акаунти на хакерських форумах, щоб шпигувати за кіберзлочинцями

Швейцарська компанія з кібербезпеки Prodaft запустила ініціативу під назвою «Продай своє джерело», в рамках якої…

16.04.2025

Реалізацію мови програмування Ruby для JVM оновлено до версії 10

Презентовано JRuby 10 — останню версію реалізації мови програмування Ruby на основі JVM. Вона має…

16.04.2025

xAI представляє Grok Studio — інструмент для генерації та запуску коду

Компанія Ілона Маска xAI презентувала новий онлайн-інструмент під назвою Grok Studio. Він призначений для редагування…

16.04.2025

В «Мрію» додадуть генератор тестів за допомогою ШІ

В освітній платформі «Мрія» планують впровадити генератор тестів на основі штучного інтелекту. Про це в…

15.04.2025

OpenAI працює над запуском соціальної мережі

OpenAI працює над власною X-подібною соціальною мережею, згідно з кількома джерелами, знайомими з цим питанням,…

15.04.2025

Хакери з КНДР змінюють тактику злому комп’ютерів Python-розробників

Команда Unit 42 з Palo Alto Networks помітила чергову активність хакерської групи з КНДР, яка…

15.04.2025