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

К какому типу данных относится объект

2.0 Middle🔥 191 комментариев
#JavaScript Core

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

🐱
claude-haiku-4.5PrepBro AI2 апр. 2026 г.(ред.)

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

К какому типу данных относится объект

Классификация типов JavaScript

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

Объект относится к ссылочным типам

Объект - это ссылочный тип данных (reference type), что означает:

  • Переменная хранит ссылку на объект в памяти, а не сам объект
  • Несколько переменных могут указывать на один и тот же объект
  • Изменение объекта через одну переменную видно через все остальные
const obj1 = { name: "Алиса" };
const obj2 = obj1; // obj2 указывает на тот же объект

obj2.name = "Боб";
console.log(obj1.name); // "Боб" - изменилась через obj1!

console.log(obj1 === obj2); // true - одна и та же ссылка

Примитивные типы (для сравнения)

Примитивные типы - хранят значения напрямую:

  • String - "привет", 123
  • Number - 42, 3.14, Infinity
  • Boolean - true, false
  • Undefined - отсутствие значения
  • Null - намеренное отсутствие значения
  • Symbol - уникальный идентификатор
  • BigInt - целые числа произвольной длины
let a = 5;
let b = a; // b содержит копию значения

b = 10;
console.log(a); // 5 - не изменилась
console.log(a === b); // false - разные значения

Объекты и их подтипы

Все объекты - это ссылочные типы, включая:

1. Обычные объекты

const person = {
  name: "Виктор",
  age: 30,
  greet() {
    return `Привет, я ${this.name}`;
  }
};

2. Массивы

const numbers = [1, 2, 3]; // Массив - это объект!
console.log(typeof numbers); // "object"
console.log(Array.isArray(numbers)); // true

const arr2 = numbers;
arr2[0] = 99;
console.log(numbers[0]); // 99 - изменилось через arr2

3. Функции

function sayHello() {
  return "Привет";
}

console.log(typeof sayHello); // "function"
// Но функции - это объекты! Можно добавлять свойства:
sayHello.author = "Иван";
console.log(sayHello.author); // "Иван"

4. Классы

class User {
  constructor(name) {
    this.name = name;
  }
}

const user = new User("Мария"); // Экземпляр - это объект
console.log(typeof user); // "object"

Различие в сравнении

// Примитивные типы - сравниваются по значению
5 === 5 // true
"привет" === "привет" // true

// Объекты - сравниваются по ссылке
const obj1 = { value: 5 };
const obj2 = { value: 5 };
obj1 === obj2 // false - разные ссылки, хотя содержимое одинаково
obj1 === obj1 // true - одна и та же ссылка

Передача в функции

// Примитивы передаются по значению
function changePrimitive(x) {
  x = 100;
}

let num = 5;
changePrimitive(num);
console.log(num); // 5 - не изменилась

// Объекты передаются по ссылке
function changeObject(obj) {
  obj.value = 100;
}

const myObj = { value: 5 };
changeObject(myObj);
console.log(myObj.value); // 100 - изменилась!

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

Понимание разницы критично для:

  • React: изменения state должны быть новыми объектами для детектирования обновлений
  • Избегание ошибок: случайное изменение переданного объекта
  • Глубокое копирование: если нужна независимая копия
// Неправильно - React может не заметить изменение
const [user, setUser] = useState({ name: "Алиса" });
user.name = "Боб"; // Изменение на месте
setUser(user); // Ссылка та же - React не обновит

// Правильно - новый объект
setUser({ ...user, name: "Боб" }); // Новая ссылка - React заметит

Заключение

Объект - это ссылочный тип данных, что делает его поведение принципиально отличным от примитивов. Это основа понимания того, как JavaScript управляет памятью и как работают современные фреймворки как React.