← Назад к вопросам

На какие категории можно разделить типы данных JS?

2.3 Middle🔥 161 комментариев
#JavaScript Core

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI4 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Категории типов данных в JavaScript

В JavaScript все типы данных можно разделить на две фундаментальные категории, основанные на механизме хранения и передачи значений: примитивные типы (Primitive Types) и ссылочные типы (Reference Types). Это разделение критически важно для понимания работы с переменными, присваиванием, сравнением и мутацией данных.

1. Примитивные типы (Primitive Types)

Примитивные типы представляют собой неизменяемые (immutable) значения, которые хранятся непосредственно в области памяти переменной. При присваивании или передаче в функцию создается копия значения. К примитивам относятся 7 типов:

  • string: Строки текста. Создаются с помощью кавычек (одинарных, двойных или обратных).

    let name = "Alice";
    let greeting = `Hello, ${name}!`; // Шаблонная строка
    
  • number: Числа, включая целые, дробные, Infinity, -Infinity и NaN (Not-a-Number). Нет отдельного типа для целых или чисел с плавающей точкой.

    let integer = 42;
    let float = 3.14159;
    let notANumber = NaN;
    
  • bigint: Тип для представления целых чисел произвольной длины. Создается путем добавления суффикса n.

    const bigNumber = 9007199254740991n; // Больше, чем Number.MAX_SAFE_INTEGER
    
  • boolean: Логический тип, принимающий значения true или false.

    let isActive = true;
    let isComplete = false;
    
  • undefined: Значение, присваиваемое переменной, которая была объявлена, но не инициализирована. Также является возвращаемым значением функций, которые ничего не возвращают явно.

    let unknownValue;
    console.log(unknownValue); // undefined
    
  • null: Специальное значение, обозначающее "ничего", "пусто" или "значение неизвестно". Явно присваивается разработчиком.

    let emptyValue = null;
    
  • symbol: Уникальный и неизменяемый идентификатор. Используется для создания скрытых свойств объектов или в качестве ключей.

    const id = Symbol('uniqueId');
    let obj = { [id]: 123 };
    

Ключевые особенности примитивов:

  • Сравнение по значению (== или ===).
  • Неизменяемы. Операции создают новое значение.
  • Хранятся в стеке (Stack memory).

2. Ссылочные типы (Reference Types)

К ссылочным типам относится, по сути, один тип – object. Однако объекты в JavaScript имеют множество форм и специализаций. Значением ссылочного типа является ссылка (адрес в памяти) на объект. При присваивании или передаче в функцию копируется эта ссылка, а не сам объект. Все следующие сущности являются объектами:

  • Object: Простой объект – коллекция пар ключ-значение.

    let user = { name: "Bob", age: 30 };
    
  • Array: Упорядоченная коллекция данных с целочисленными индексами.

    let fruits = ["apple", "banana", "orange"];
    
  • Function: Объект, который может быть вызван. Функции – это объекты первого класса.

    function sum(a, b) { return a + b; }
    let multiply = function(x, y) { return x * y; };
    
  • Date: Представляет дату и время.

    let now = new Date();
    
  • RegExp: Представляет регулярное выражение для поиска и манипуляций со строками.

    let pattern = /test/gi;
    
  • Map, Set, WeakMap, WeakSet: Специализированные коллекции, появившиеся в ES6.

    let map = new Map();
    map.set('key', 'value');
    
    let set = new Set([1, 2, 2, 3]); // {1, 2, 3}
    
  • Обертки для примитивов: String, Number, Boolean, BigInt, Symbol (используются редко, автоматически).

    let strObject = new String("Hello"); // Объект-обертка, не примитив
    

Ключевые особенности ссылочных типов:

  • Сравнение по ссылке. Два объекта с одинаковым содержимым не равны.
    let a = { value: 10 };
    let b = { value: 10 };
    console.log(a === b); // false (разные ссылки)
    let c = a;
    console.log(a === c); // true (одинаковая ссылка)
    
  • Изменяемы (мутабельны). Можно менять свойства, добавлять новые.
  • Хранятся в куче (Heap memory). Переменная содержит указатель на эту область.

Практическое значение разделения

Понимание этой классификации помогает избегать частых ошибок:

  1. Мутации: Изменение объекта по одной ссылке влияет на все другие переменные, ссылающиеся на тот же объект.
  2. Клонирование: Для создания независимой копии объекта нужны специальные методы (Object.assign, спред-оператор ..., JSON.parse(JSON.stringify(obj)), библиотечные функции).
  3. Сравнение: Проверка равенства объектов требует глубокого сравнения свойств, а не оператора ===.

Таким образом, разделение на примитивы и объекты (ссылочные типы) – это краеугольный камень ментальной модели программиста на JavaScript, определяющий поведение данных в 99% ситуаций.

На какие категории можно разделить типы данных JS? | PrepBro