← Назад к вопросам
Какие знаешь типы данных в JavaScript для хранения нескольких элементов?
1.0 Junior🔥 171 комментариев
#JavaScript Core
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI21 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Типы данных в JavaScript для хранения нескольких элементов
В JavaScript существует несколько встроенных типов данных, специально предназначенных для хранения коллекций элементов. Каждый имеет свои особенности и область применения.
1. Array (Массив)
Самый распространенный тип для хранения упорядоченного списка элементов:
// Создание массива
const numbers = [1, 2, 3, 4, 5];
const mixed = [1, 'string', true, null, undefined];
const empty = [];
const nested = [[1, 2], [3, 4]];
// Доступ к элементам по индексу (начиная с 0)
console.log(numbers[0]); // 1
console.log(numbers[numbers.length - 1]); // 5
// Основные методы
numbers.push(6); // Добавить в конец
numbers.pop(); // Удалить из конца
numbers.unshift(0); // Добавить в начало
numbers.shift(); // Удалить из начала
numbers.slice(1, 3); // Копировать элементы [2, 3]
numbers.splice(1, 2, 'new'); // Удалить 2 элемента, вставить 'new'
numbers.map(x => x * 2); // Трансформировать каждый элемент
numbers.filter(x => x > 2); // Отфильтровать
numbers.reduce((sum, x) => sum + x, 0); // Свернуть в одно значение
Особенности:
- Упорядоченная коллекция
- Доступ по индексу O(1)
- Динамический размер
- Может содержать элементы любого типа
- Мутабельные методы модифицируют исходный массив
2. Object (Объект)
Это ассоциативный массив (map) - хранит пары ключ-значение:
// Создание объекта
const user = {
name: 'John',
age: 30,
email: 'john@example.com'
};
// Доступ к свойствам
console.log(user.name); // 'John'
console.log(user['age']); // 30
// Добавление и удаление
user.city = 'New York';
delete user.email;
// Итерация
Object.keys(user); // ['name', 'age', 'city']
Object.values(user); // ['John', 30, 'New York']
Object.entries(user); // [['name', 'John'], ...]
for (const key in user) {
console.log(key, user[key]);
}
Особенности:
- Неупорядоченная коллекция (в современных браузерах сохраняет порядок)
- Доступ по ключу
- Ключи всегда строки или Symbol
- Эффективен для поиска по ключу
- Используется для представления сложных структур данных
3. Set (Множество)
Коллекция уникальных значений без дубликатов:
// Создание Set
const numbers = new Set([1, 2, 2, 3, 3, 3]);
console.log(numbers); // Set(3) { 1, 2, 3 } - дубликаты удалены
// Основные операции
numbers.add(4); // Добавить элемент
numbers.has(2); // true - проверка наличия
numbers.delete(2); // Удалить элемент
numbers.clear(); // Удалить все элементы
console.log(numbers.size); // Размер множества
// Итерация
for (const num of numbers) {
console.log(num);
}
numbers.forEach(num => console.log(num));
// Преобразования
const arr = Array.from(numbers); // Set в массив
const setAgain = new Set(arr); // Массив в Set
// Пример: удалить дубликаты из массива
const arrayWithDuplicates = [1, 1, 2, 2, 3, 3];
const unique = [...new Set(arrayWithDuplicates)];
console.log(unique); // [1, 2, 3]
Особенности:
- Хранит только уникальные значения
- Быстрая проверка наличия элемента O(1)
- Может содержать значения любого типа
- Упорядочен по порядку добавления
- Не имеет индексов
4. Map (Словарь)
Похож на Object, но ключами могут быть любые значения:
// Создание Map
const userMap = new Map();
// Добавление элементов
userMap.set('name', 'John');
userMap.set('age', 30);
userMap.set(1, 'one'); // Ключ может быть числом
const objKey = { id: 1 };
userMap.set(objKey, 'object key'); // Даже объект может быть ключом
// Доступ к элементам
console.log(userMap.get('name')); // 'John'
console.log(userMap.has('age')); // true
console.log(userMap.size); // 4
// Удаление
userMap.delete('age');
userMap.clear();
// Итерация
for (const [key, value] of userMap) {
console.log(key, value);
}
userMap.forEach((value, key) => {
console.log(key, value);
});
// Преобразования
const arr = Array.from(userMap); // [[key1, val1], [key2, val2], ...]
const obj = Object.fromEntries(userMap); // Map в Object
Особенности:
- Ключи могут быть любого типа (объекты, функции и т.д.)
- Быстрая проверка наличия и доступ O(1)
- Сохраняет порядок вставки
- Лучше Object для часто меняющихся пар ключ-значение
5. WeakSet и WeakMap
Частные случаи Set и Map для управления памятью:
// WeakSet - только объекты, слабые ссылки
const weakSet = new WeakSet();
const obj1 = { id: 1 };
weakSet.add(obj1);
weakSet.has(obj1); // true
// Если нет других ссылок на obj1, сборщик мусора его удалит
// WeakSet автоматически удалится из структуры
// WeakMap - только объекты как ключи, слабые ссылки на ключи
const weakMap = new WeakMap();
const user = { name: 'John' };
weakMap.set(user, 'userData');
weakMap.get(user); // 'userData'
Особенности:
- Не итерируемы (нет методов forEach, for...of)
- Только объекты как элементы/ключи
- Автоматически удаляются при сборке мусора
- Полезны для приватных данных и кеширования
6. TypedArrays (Типизированные массивы)
Для работы с бинарными данными:
// Создание типизированного массива
const uint8 = new Uint8Array(4); // Массив из 4 беззнаковых 8-битных чисел
const int32 = new Int32Array(10);
const float64 = new Float64Array(5);
uint8[0] = 255;
uint8[1] = 256; // Переполнение, сохранится 0
// Используется для:
// - Бинарных протоколов
// - WebGL, Canvas
// - WebAssembly
// - Работы с файлами
Сравнение производительности
// Проверка наличия элемента
const arr = [1, 2, 3, 100000]; // O(n)
arr.includes(100000); // медленно
const set = new Set(arr); // O(1)
set.has(100000); // быстро
const map = new Map([['key1', 'val1']]);
map.has('key1'); // O(1) - быстро
const obj = { key1: 'val1' };
'key1' in obj; // O(1) - быстро
Когда использовать что
- Array: основной выбор для списков, упорядоченных данных
- Object: простые структуры данных, ключи всегда строки
- Set: когда нужны уникальные значения, быстрая проверка наличия
- Map: когда ключи могут быть объектами или когда нужна гарантированная упорядоченность
- WeakSet/WeakMap: приватные данные и управление памятью
- TypedArrays: бинарные данные, производительность критична