> Какие ключи могут быть в объекте и в Map в JavaScript (JavaScript)

Уровень: middle · Роль: frontend · Категория: Технические вопросы

Компании: Molecula

Стек: JavaScript

> Пример ответа

В JavaScript объекты и Map имеют разные ограничения на типы ключей.

Ключи объекта могут быть только строками (String) или символами (Symbol). Любое другое значение (число, булево, объект, null, undefined) автоматически приводится к строке. Например:

JAVASCRIPT
const obj = {};
obj[1] = 'one'; // ключ становится строкой '1'
obj[true] = 'yes'; // ключ становится строкой 'true'
obj[{a: 1}] = 'obj'; // ключ становится строкой '[object Object]'
console.log(obj); // { '1': 'one', 'true': 'yes', '[object Object]': 'obj' }

Ключи Map могут быть любыми значениями - примитивами (числа, строки, булевы, null, undefined, символы) и объектами (включая функции, массивы, другие Map). Приведение типов не происходит, ключи сравниваются по строгому равенству (===), за исключением NaN (считается равным самому себе в Map).

JAVASCRIPT
const map = new Map();
map.set(1, 'one');
map.set('1', 'string one'); // это другой ключ, не число 1
map.set({}, 'obj');
map.set(NaN, 'nan');
console.log(map.size); // 4

Ключевые отличия:

  • В объекте ключи всегда строки или символы (другие типы преобразуются).
  • В Map ключи могут быть любого типа, включая объекты, без приведения.
  • Map сохраняет порядок вставки ключей, объект (с ES2015) - только для строковых ключей в определённом порядке.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью