Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про JavaScript: primitive, reference

Чем примитивные типы отличаются от непримитивных?

Этот вопрос проверяет, понимаете ли вы разницу между значениями “по значению” и “по ссылке”, а также как это влияет на сравнение и изменения данных.

Короткий ответ

Примитивы (например, number, string, boolean) хранят “само значение”, и при присваивании копируется значение. Непримитивы (объекты, массивы, функции) хранятся как ссылка на объект в памяти, и при присваивании копируется ссылка. Поэтому изменения объекта через одну переменную видны в другой. Также сравнение объектов чаще сравнивает ссылки, а не содержимое.

Длинный ответ

Определение

Примитивный тип — значение, которое не является объектом и ведёт себя как “копируемое значение”.
Непримитивный тип — объект (включая массивы и функции), который передаётся как “ссылка на один и тот же объект”.

Что относится к примитивам и непримитивам

  1. Примитивы:

    • string

    • number

    • boolean

    • null

    • undefined

    • bigint

    • symbol

  2. Непримитивы:

    • object (в т.ч. {}, [], new Date(), Map, Set)

    • function (технически тоже объект)

Основное отличие: копия значения vs копия ссылки

Перед перечислением важно запомнить идею: у примитива “нет внутреннего состояния, на которое можно сослаться”, а у объекта есть.

  1. Примитивы копируются “как есть”

    let a = 10;
    let b = a;
    b = 20;
    
    console.log(a); // 10
    console.log(b); // 20
    
  2. Объекты копируются как ссылка на один и тот же объект

    const obj1 = { x: 1 };
    const obj2 = obj1;
    
    obj2.x = 2;
    
    console.log(obj1.x); // 2
    console.log(obj2.x); // 2
    

Как это влияет на сравнение

  1. Примитивы сравниваются по значению:

    • 5 === 5 → true

  2. Объекты сравниваются по ссылке:

    const a = { x: 1 };
    const b = { x: 1 };
    const c = a;
    
    console.log(a === b); // false (разные объекты)
    console.log(a === c); // true (одна и та же ссылка)
    

Практический вывод

  1. Если вы хотите “безопасно менять данные”, объекты нужно копировать (например, через spread или structuredClone).

  2. Если вы храните состояние в UI (React/Redux), важно помнить: изменение вложенного объекта без создания новой ссылки часто ломает корректное обновление.

Уровень

  • Рейтинг:

    5

  • Сложность:

    4

Навыки

  • JavaScript

    JavaScript

Ключевые слова

#primitive

#reference

Подпишись на React Developer в телеграм