Проверяет понимание различий между Map и Object в JavaScript, включая производительность, типы ключей и порядок обхода.
Map и Object в JavaScript оба хранят пары ключ-значение, но решают разные задачи. Object — это базовая структура языка, у которой есть прототип, а ключи приводятся к строкам или символам. Map — это специализированная коллекция, где ключом может быть любое значение: объект, функция, число, NaN.
Map оптимизирован для частых добавлений, удалений и проверок наличия. В Object операции с динамическими ключами могут деградировать из-за перехода в dictionary mode. При большом количестве пар и частых изменениях Map обычно быстрее и предсказуемее.
Map сохраняет порядок вставки и легко итерируется через for...of, keys(), values(), entries(). Object тоже сохраняет порядок для строковых ключей, но целочисленные ключи сортируются по возрастанию, что может быть неожиданно.
const obj = {};
const map = new Map();
const keyObj = { id: 1 };
obj[keyObj] = 'value'; // ключ станет '[object Object]'
map.set(keyObj, 'value'); // ключ останется объектом
console.log(obj); // { '[object Object]': 'value' }
console.log(map.get(keyObj)); // 'value'
map.set(1, 'one');
map.set('1', 'string one');
console.log(map.size); // 2, разные ключи
for (const [k, v] of map) {
console.log(k, v);
}
Итог: выбирайте Map, когда нужна настоящая коллекция пар ключ-значение с любыми ключами и частыми изменениями; Object удобнее для статических структур и работы с JSON.