Sobes.tech
Назад к вопросам
Junior
88
questionbank

В чем заключается разница между различными типами данных?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

В JavaScript данные делятся на примитивные типы и объекты.

Примитивные типы:

  • String: Последовательность символов. Неизменяемый.
  • Number: Числа, включая целые и с плавающей точкой, а также Infinity, -Infinity и NaN.
  • Boolean: Логическое значение (true или false).
  • Null: Специальное значение, представляющее отсутствие объекта.
  • Undefined: Значение переменной, которой не было присвоено значение.
  • Symbol: Уникальный и неизменяемый примитивный тип, используемый для идентификаторов свойств объекта.
  • BigInt: Целые числа произвольной длины.

Объекты:

  • Object: Коллекция пар ключ-значение. Изменяемый. Примеры: массивы, функции, регулярные выражения, даты.

Основные различия:

  1. Изменяемость (Mutability): Примитивные типы неизменяемы, т.е. нельзя изменить их значение напрямую. При попытке изменения создается новая копия. Объекты изменяемы, их свойства можно добавлять, удалять и изменять.
  2. Передача по значению/ссылке: Примитивные типы передаются по значению (копируется само значение). Объекты передаются по ссылке (копируется ссылка на место в памяти, где хранится объект).
  3. Сравнение: Примитивные типы сравниваются по значению. Объекты сравниваются по ссылке (две переменные ссылаются на один и тот же объект в памяти).
// Примеры
let str1 = "hello";
let str2 = str1; // str2 получает копию значения str1
str1 = "world"; // Создается новая строка "world" для str1
console.log(str2); // "hello" - str2 не изменился

let obj1 = { name: "Alice" };
let obj2 = obj1; // obj2 получает ссылку на тот же объект, что и obj1
obj1.name = "Bob"; // Изменяется свойство объекта, на который ссылаются обе переменные
console.log(obj2.name); // "Bob" - obj2 изменился

let num1 = 10;
let num2 = 10;
console.log(num1 === num2); // true - сравниваются значения

let objA = { value: 1 };
let objB = { value: 1 };
console.log(objA === objB); // false - сравниваются ссылки (ссылаются на разные объекты, хоть и с одинаковым содержимым)

Таблица различий:

Признак Примитивные типы Объекты
Изменяемость Неизменяемые Изменяемые
Передача По значению По ссылке
Сравнение По значению По ссылке
Хранение Напрямую в переменной Ссылка на место в памяти
Типы данных String, Number, Boolean, Null, Undefined, Symbol, BigInt Object (включая массивы, функции и т.д.)