Вопрос проверяет понимание классификации типов данных в JavaScript, что необходимо для корректной работы с переменными и избегания ошибок типизации.
В JavaScript все значения имеют определённый тип данных, и понимание их классификации критически важно для написания предсказуемого кода. Типы делятся на две фундаментальные группы: примитивные (primitive) и ссылочные (reference). Это разделение основано на способе хранения и передачи данных в памяти.
Примитивные типы являются неделимыми, неизменяемыми (immutable) значениями, которые хранятся непосредственно в переменной. При копировании переменной с примитивным значением создаётся независимая копия этого значения. К примитивам относятся:
'Hello'.Infinity и NaN.true и false.Ссылочные типы — это объекты (в широком смысле). Переменная, содержащая объект, массив или функцию, хранит не само значение, а ссылку (адрес в памяти) на него. При копировании такой переменной копируется только ссылка, а не сам объект, поэтому обе переменные начинают указывать на одни и те же данные в памяти.
// Пример с примитивом (копирование значения)
let a = 5;
let b = a; // b получает копию значения 5
b = 10;
console.log(a); // 5, a не изменилось
// Пример со ссылочным типом (копирование ссылки)
let obj1 = { name: 'John' };
let obj2 = obj1; // obj2 получает ссылку на тот же объект
obj2.name = 'Jane';
console.log(obj1.name); // 'Jane', объект изменён через обе ссылкиОператор typeof помогает определить тип, но для null он возвращает 'object' (историческая особенность), а для массивов и null нужны дополнительные проверки. Понимание разницы между группами предотвращает ошибки при сравнении (используйте строгое равенство ===) и мутациях объектов.
Вывод: Знание разделения на примитивы и ссылочные типы необходимо для корректного управления данными, особенно при работе с функциями, изменением состояния и сравнением значений в JavaScript.