Questão nº 8
Questão de Desenvolvimento de Sistemas · FGV CGE-SC 2022 (nº 8)
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`
- B`2 3 4` (alternativa correta)
- C`4 5 6`
- D`[1, 2, 3]`
- E`[2, 3, 4]`
Resposta comentada
Gabarito Alternativa B
Quando você coloca objetos em um array no JavaScript, o array guarda referências para esses objetos, não cópias. Isso significa que, se você modificar um objeto através de uma referência (como dentro de um `forEach`), você estará alterando o objeto original.
(A) Incorreta: Esta é a armadilha mais comum. Os objetos são passados por referência para o `forEach`, então as modificações feitas dentro do loop afetam os objetos originais.
(B) Correta: O `forEach` itera sobre o array `arr`. Para cada elemento, `obj` é uma referência ao objeto original (`a`, `b` ou `c`). A linha `obj.x += 1` incrementa a propriedade `x` do objeto original. Assim, `a.x` se torna `2`, `b.x` se torna `3`, e `c.x` se torna `4`.
(C) Incorreta: Os valores iniciais são `1, 2, 3` e são incrementados apenas uma vez cada.
(D) Incorreta: O `console.log(a.x, b.x, c.x)` imprime os valores separados por espaço, não como um array. Além disso, os valores estão incorretos.
(E) Incorreta: O `console.log` imprime valores separados por espaço, não um array.
Fonte: FGV CGE-SC 2022 Auditor do Estado - Ciências da Computação (Caderno Tipo 1). Reproduzida para fins de estudo.