E só pra complementar o complemento, tem casos em que faz diferença usar for..in
ou Object.entries
. O primeiro considera propriedades setadas no protótipo, o segundo não:
Object.prototype.x = 42;
let objeto = {
'chave 1': 42,
'chave 2': 3.14,
'chave 3': 9.8,
}
console.log('Object.entries');
// Object.entries não pega as propriedades setadas no protótipo
for (const [chave, valor] of Object.entries(objeto)) {
console.log(`${chave} = ${valor}`);
}
console.log('for..in');
// for..in pega as propriedades setadas no protótipo
for (const chave in objeto) {
console.log(`${chave} = ${objeto[chave]}`);
}
Saída:
Object.entries
chave 1 = 42
chave 2 = 3.14
chave 3 = 9.8
for..in
chave 1 = 42
chave 2 = 3.14
chave 3 = 9.8
x = 42
Se quiser ignorar as propriedades setadas no protótipo, bastaria mudar para:
for (const chave in objeto) {
if (objeto.hasOwnProperty(chave))
console.log(`${chave} = ${objeto[chave]}`);
}
E tem outras diferenças mais "esotéricas" entre os vários tipos de for
, mas acho que fogem demais do escopo (talvez fique pra um post futuro).