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

Что такое сложный тип данных?

2.2 Middle🔥 141 комментариев
#Node.js и JavaScript

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

🐱
claude-haiku-4.5PrepBro AI30 мар. 2026 г.(ред.)

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

Сложные типы данных (составные, ссылочные типы) — это типы, которые содержат несколько значений или структуру данных внутри себя, в отличие от примитивных типов (число, строка, булев). В JavaScript основными сложными типами являются объекты, массивы, функции и другие.

Отличие от примитивных типов

Примитивные типы (хранятся по значению): number, string, boolean, null, undefined, symbol, bigint

Сложные типы (хранятся по ссылке): Object, Array, Function

let a = 5;
let b = a;
b = 10;
console.log(a); // 5

let obj1 = { name: 'Иван' };
let obj2 = obj1;
obj2.name = 'Петр';
console.log(obj1.name); // 'Петр'

Основные сложные типы

Объекты (Objects)

Неупорядоченная коллекция пар ключ-значение, основная структура для хранения данных.

const person = {
  name: 'Александр',
  age: 30,
  city: 'Москва',
  skills: ['JavaScript', 'Node.js', 'SQL'],
  address: {
    street: 'Тверская',
    number: 42
  }
};

console.log(person.name);
console.log(person['age']);
console.log(person.address.street);

Массивы (Arrays)

Упорядоченная коллекция элементов, доступных по индексу. Это частный случай объекта.

const numbers = [1, 2, 3, 4, 5];
const mixed = [42, 'hello', true, { id: 1 }, null];

console.log(numbers[0]);
console.log(numbers.length);

numbers.push(6);
numbers.map(n => n * 2);
numbers.filter(n => n > 2);
numbers.reduce((sum, n) => sum + n, 0);

Функции (Functions)

Функции являются объектами первого класса и могут передаваться как значения.

function greet(name) {
  return `Привет, ${name}!`;
}

const add = function(a, b) {
  return a + b;
};

const multiply = (a, b) => a * b;

const calculator = {
  value: 10,
  divide: function(x) {
    return this.value / x;
  }
};

const applyTwice = (fn, value) => fn(fn(value));

Map и Set

Специализированные типы для хранения уникальных или упорядоченных данных.

const uniqueNumbers = new Set([1, 2, 2, 3, 3, 3]);
console.log(uniqueNumbers);
uniqueNumbers.add(4);
console.log(uniqueNumbers.has(2));

const userMap = new Map();
userMap.set('user1', { name: 'Иван' });
userMap.set('user2', { name: 'Петр' });
console.log(userMap.get('user1'));

Работа со сложными типами

Копирование

const original = { a: 1, b: { c: 2 } };
const shallow = { ...original };
shallow.b.c = 999;
console.log(original.b.c);

const deep = JSON.parse(JSON.stringify(original));
deep.b.c = 777;
console.log(original.b.c);

Сравнение

const obj1 = { a: 1 };
const obj2 = { a: 1 };
const obj3 = obj1;

console.log(obj1 === obj2);
console.log(obj1 === obj3);
console.log(JSON.stringify(obj1) === JSON.stringify(obj2));

Использование в Node.js backend

const user = {
  id: 1,
  name: 'Иван',
  email: 'ivan@example.com',
  roles: ['admin', 'user'],
  profile: {
    avatar: 'https://...',
    bio: 'Разработчик'
  }
};

const users = [
  { id: 1, name: 'Иван' },
  { id: 2, name: 'Петр' }
];

app.get('/users', (req, res) => {
  res.json({ data: users, count: users.length });
});

Сложные типы данных — это основа программирования в JavaScript и Node.js. Понимание их природы (копирование по ссылке, сравнение, трансформация) критично для написания корректного кода.

Что такое сложный тип данных? | PrepBro