Analise o trecho de código JavaScript a seguir. const xxxxx = ... let texto = ""; for (const x of xxxxx) { texto += x; } Assinale a definição de xxxxx que não funciona para o código acima.
- A)const xxxxx = "abcdefghijklmnopqrstuvwxyz";
Correta, porque strings são iteráveis em JavaScript e podem ser percorridas caractere por caractere no `for...of`.
- B)const xxxxx = [undefined, null];
Correta, porque arrays são iteráveis, mesmo contendo valores `undefined` e `null`, que podem ser concatenados ao texto.
- C)const xxxxx = {10,12,14};
Errada, porque `{10,12,14}` não é uma sintaxe válida de objeto em JavaScript e não produz um iterável aproveitável pelo laço.
- D)const xxxxx = new Set(["a","b","c"]);
Correta, porque `Set` é iterável e o `for...of` percorre seus elementos normalmente.
- E)const xxxxx = new Map([["Um", 1], ["Dois", 2]]);
Correta, porque `Map` é iterável e o `for...of` percorre seus pares `[chave, valor]`.
Gabarito: C
Neste tipo de questão, o ponto central é simples: o trecho usa um `for...of`, então `xxxxx` precisa ser algo iterável, isto é, algo que possa ser percorrido elemento por elemento. Strings, arrays, `Set` e até `Map` funcionam bem porque o JavaScript consegue entregar itens em sequência para o laço. No caso de `Map`, o laço percorre pares `[chave, valor]`, e ao fazer `texto += x`, esses pares acabam sendo convertidos para texto. Já em `undefined` e `null`, cada item do array também pode ser percorrido normalmente, sem drama. O gabarito é a letra C porque `const xxxxx = {10,12,14};` não forma um objeto válido em JavaScript. Dentro de chaves, você precisa de pares chave-valor, propriedades abreviadas ou alguma estrutura sintaticamente correta; do jeito que está, a declaração já quebra antes mesmo do `for...of` começar a trabalhar. Em resumo: o laço `for...of` exige um iterável, mas aqui a pegadinha principal é ainda mais cruel: a alternativa C nem chega a ser uma definição válida de JavaScript. A banca gosta muito desse detalhe de sintaxe disfarçado de teste de iteração.