Коротка відповідь
juniorУ JavaScript існує сім типів даних: примітивні (Number, String, Boolean, null, undefined, Symbol) та об’єктний тип (Object). Кожен тип має свої правила порівняння і поведінку при копіюванні. При роботі з API часто використовують Number, String, Boolean, а для складних структур – Object або Map (`typeof null` returns `'object'`, which is a known quirk).
Повне пояснення
Що це і навіщо
- У JavaScript існує сім типів даних:
- Примітивні:
Number,String,Boolean,null,undefined,Symbol. - Об’єктний:
Object(включає масиви, функції, Map, Set тощо).
- Примітивні:
Ключові принципи/терміни
- Примітивні типи передаються за значенням; об’єкти – за посиланням.
typeof nullповертає'object'– історична особливість, яку слід враховувати при перевірках.
Як це працює
- При присвоєнні примітиву нова копія створюється; при присвоєнні об’єкта – посилання.
- Порівняння примітивів виконується за значенням, а об’єктів — за посиланням.
Практика і реалізація (JS/TS)
const a: number = 42;
const b: string = 'hello';
const c: boolean = true;
const d: null = null;
const e: undefined = undefined;
const f: symbol = Symbol('id');
const g: object = { x: 1 };
Тестування (Jest)
test('null is typeof object', () => {
expect(typeof null).toBe('object');
});
Особливості в контексті JS Core
Numberпідтримує NaN, Infinity;String– шаблонні літерали.Symbolвикористовується для унікальних ключів об’єктів.
Оптимізація та edge cases
- Уникайте порівняння
==між різними типами; використовуйте строгое (===). - Перевіряйте
nullіundefinedокремо, оскільки вони не є об’єктами.
Часті помилки
typeof null === 'object'→ неправильне розуміння типу.- Неочікуване копіювання масивів через присвоєння.
- Використання
==між різними типами. - Забудьте про
Symbol()у ключах об’єктів. - Перевірка
undefinedякnull. - Втрата контексту при передачі функцій (this).
- Необхідність перевірки
Array.isArray(). - Порушення типізації в TypeScript через
any.