Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Сложные типы данных (составные, ссылочные типы) — это типы, которые содержат несколько значений или структуру данных внутри себя, в отличие от примитивных типов (число, строка, булев). В 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. Понимание их природы (копирование по ссылке, сравнение, трансформация) критично для написания корректного кода.