Пошук уроків, статей та іншого контенту
Примітивні та референсні типи в JavaScript: number, string, boolean, object, array та typeof.
JavaScript має сім примітивних типів даних:
number — усі числа, включно з дробовими: 42, 3.14, -7
string — текстові рядки: "привіт", 'світ'
boolean — true або false
undefined — змінна оголошена, але без значення
null — навмисна відсутність значення
symbol — унікальний ідентифікатор
bigint — для чисел, що перевищують безпечний діапазон number
typeof 42; // "number"
typeof "текст"; // "string"
typeof true; // "boolean"
typeof undefined; // "undefined"
typeof null; // "object" (історична помилка мови!)typeof null повертає "object" — це відома історична помилка в дизайні JavaScript, яку неможливо виправити без порушення сумісності зі старим кодом.
Об'єкти, масиви та функції — референсні типи. Змінна не зберігає сам об'єкт, а посилання на нього в пам'яті:
const a = { count: 1 };
const b = a; // b посилається на той самий об'єкт
b.count = 2;
console.log(a.count); // 2 — обидві змінні бачать змінуtypeof для масивів завжди повертає "object", тому для перевірки використовують інший метод:
Array.isArray([1, 2, 3]); // true
Array.isArray({}); // falseПеревірка масиву через typeof — завжди поверне "object", потрібен саме Array.isArray.
Довіра typeof null === "object" як ознаці «це справжній об'єкт» — це історична помилка мови, а не сигнал про тип значення.
Плутанина примітивів (копіюються за значенням) і референсних типів (копіюється лише посилання) — детальніше про наслідки цього для функцій і присвоєнь у наступних модулях.
JavaScript має сім примітивних типів (number, string, boolean, undefined, null, symbol, bigint) — вони копіюються за значенням. Об'єкти, масиви й функції — референсні типи: змінна зберігає посилання, тому кілька змінних можуть вказувати на ту саму структуру в пам'яті. typeof визначає тип для примітивів надійно, але для масивів завжди повертає "object" — для них потрібен Array.isArray.
Спробуйте самостійно
Напишіть функцію describe(value), яка повертає рядок з типом значення, коректно розрізняючи масиви, null та звичайні об'єкти.