Executando verificação de segurança...
1

Tem várias diferenças, que estão listadas na documentação. As principais:


Um objeto pode ter propriedades que vêm do protótipo, o que pode acabar dando resultados confusos (principalmente se o protótipo for modificado em outro ponto do código):

// todo objeto terá a propriedade "x"
Object.prototype.x = 1;

const obj = {};
if (obj['x']) { // entra nesse if
    console.log('obj tem x');
}

const map = new Map();
if (map.has('x')) { // não entra nesse if
    console.log('map tem x');
}
// somente se adicionar usando set(), aí passa a ter
map.set('x', 42);
if (map.has('x')) { // entra nesse if
    console.log('agora sim, map tem x');
}

É claro que se acessarmos map.x ou map['x'], a propriedade estará lá. Mas em um Map, você deve usar os métodos has e get para, respectivamente, verificar se a chave existe e obter o valor correspondente.


As chaves de um Map podem ser de quaisquer tipos. Já em um object, pode ser somente string ou Symbol (outros tipos são convertidos para string).

Um Map mantém as chaves na ordem de inserção, e você pode iterar um Map diretamente com for..of:

const map = new Map();
map.set('nome', 'Fulano');
map.set('idade', 42);
// iterar com for..of
for (const [ chave, valor ] of map) {
    console.log(`${chave} = ${valor}`);
}

// em um objeto, precisa usar um método auxiliar
const obj = { nome: 'Fulano', idade: 42 };
for (const [ chave, valor ] of Object.entries(obj)) {
    console.log(`${chave} = ${valor}`);
}

Além disso, a documentação diz que o objeto tem desempenho pior no caso de ter muitas inserções e remoções.

Enfim, não deixe de ler a documentação para todos os detalhes.

Carregando publicação patrocinada...