Analise o código Javascritp a seguir. let a = {x: 1}; let b = {x: 2}; let c = {x: 3}; let arr = [a, b, c]; arr.forEach((obj) => { obj.x += 1; }); console.log(a.x, b.x, c.x); O resultado exibido ao rodar esse código será
- A)1 2 3
Errada, porque os valores originais são alterados pelo forEach e não permanecem 1, 2, 3.
- B)2 3 4
Certa, porque cada objeto teve sua propriedade x incrementada em 1 antes do console.log.
- C)4 5 6
Errada, porque o código incrementa apenas uma vez cada x, não três vezes.
- D)[1, 2, 3]
Errada, porque console.log exibe três valores separados, não um array.
- E)[2, 3, 4]
Errada, porque o resultado não é um array e os valores exibidos são os números simples já atualizados.
Gabarito: B
Esse código trabalha com objetos em JavaScript e mostra um ponto importante: variáveis como a, b e c guardam referências para objetos, não cópias independentes dos valores internos. Quando você faz arr = [a, b, c], o vetor passa a apontar para esses mesmos objetos. Depois, o forEach percorre cada objeto e executa obj.x += 1, ou seja, altera diretamente a propriedade x de cada um deles. Repare no detalhe: não houve criação de novos objetos dentro do laço. O código apenas modificou os existentes. Por isso, a.x sai de 1 para 2, b.x de 2 para 3 e c.x de 3 para 4. No fim, o console.log mostra exatamente os valores já alterados. Então o resultado impresso é 2 3 4, que corresponde ao gabarito B. Em JavaScript, esse comportamento é bem comum com objetos e arrays, porque eles são manipulados por referência. É aquele clássico caso em que o código parece inocente, mas mexe nos dados originais sem pedir licença.