Considere o seguinte código JavaScript, sabendo que o usuári...

Próximas questões
Com base no mesmo assunto
Q1853850 Programação
Considere o seguinte código JavaScript, sabendo que o usuário irá digitar corretamente os valores solicitados via prompt:
var v1 = 3; var v2, v3, v4; v2 = prompt("Digite o número 3:"); v2 = prompt("Digite a palavra true:"); v4 = false;
console.log(v1===v2); console.log(v2==v3);
console.log(v1%=v2); console.log(v1);
Ao final da execução, quais valores serão impressos?
Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

Alternativa correta: B - false, false, NaN, NaN

Para resolver esta questão, é necessário entender os conceitos de tipos de dados e operadores em JavaScript, bem como a função prompt().

Primeiramente, o código declara a variável v1 com o valor 3 (um número inteiro). Após isso, são declaradas as variáveis v2, v3 e v4, mas apenas v4 é inicializada com o valor false (um valor booleano).

A função prompt() é utilizada para capturar entrada do usuário no formato de uma string. No código, há um equívoco, pois a segunda chamada do prompt deveria provavelmente armazenar o valor em v3, mas é novamente atribuído a v2. Isso significa que o valor originalmente digitado para v2 será sobrescrito. Independentemente do valor que seria atribuído a v3, ele permanece undefined, pois nunca é inicializado ou atribuído no código.

O primeiro console.log compara se v1 é estritamente igual a v2 usando o operador de igualdade estrita ===, que compara tanto o valor quanto o tipo. Como v1 é um número e v2 é uma string (mesmo que o usuário digite "3", ele é capturado como "3" - uma string), o resultado é false.

O segundo console.log compara se v2 é igual a v3 usando o operador de igualdade ==. Como v3 é undefined e v2 é uma string (neste caso, "true", digitada pelo usuário), o resultado é novamente false.

O terceiro console.log exibe o resultado do operador de módulo % entre v1 e v2. O operador de módulo retorna o resto da divisão entre dois números. No entanto, como v2 é uma string e não pode ser convertida para um número válido, o resultado é NaN (Not a Number).

Por fim, o último console.log simplesmente exibe o valor de v1, que permaneceu inalterado como 3. No entanto, devemos notar que o gabarito da questão indica que o valor seria NaN. Isso sugere que há um erro no gabarito ou um erro de digitação na questão. Se o código fosse executado conforme descrito, o valor de v1 seria de fato 3. Porém, seguindo o gabarito fornecido, assumimos que o valor de v1 seria alterado posteriormente no código (não fornecido no enunciado) resultando em NaN.

Com base nessas informações, a alternativa correta, segundo o gabarito fornecido, é a B, a qual indica que os valores impressos seriam false, false, NaN, NaN. Contudo, com base na análise do código fornecido, sem considerar alterações externas, a resposta esperada seria false, false, NaN, 3.

É importante sempre revisar o código e o gabarito fornecido em questões de concursos públicos para assegurar que não existam erros ou inconsistências.

Clique para visualizar este gabarito

Visualize o gabarito desta questão clicando no botão abaixo

Comentários

Veja os comentários dos nossos alunos

GAB B

Conceitos:

  • "===" verifica se os operandos são do mesmo tipo e mesmo valor. "1" === 1 -> false
  • "==" verifica se os operandos possuem o mesmo valor. "1" == 1 -> true
  • "prompt" sempre retorna uma string, independente se digitar um number, boolean, etc
  • "v1%=v2" equivale a "v1 = v1%v2"

 

Valores iniciais:

v1=3

v2="true"

v3=undefined

v4=false

 

Prints:

3 === "true" -> false

"true" == undefined -> false

v1 = v1%v2 -> 3%"true" -> NaN // não acharei valor válido no resto da divisão de um number por uma string

v1 -> NaN // observe que o valor de v1 foi alterado na linha anterior

Apenas complementando o colega @Leandro, que por sinal, contém diversos comentários top's, o operador "%" é chamado de módulo ou resto de uma divisão. Ex.: 10%2 = 0, pois o resto é 0 // 10%3 = 1, pois o resto é 1.

:::::::::::INDO MAIS FUNDO:::::::::::

  • "v1%=v2" equivale a "v1 = v1%v2", ou seja, o valor de v1 é reatribuído com o conteúdo da variável v1 usando o operador módulo v2.
  • Se os dois fossem números, seria exibido o resto da divisão, mas como um é do tipo string e o outro é do tipo número, fica difícil calcular (na dúvida, execute este comando em seu emulador e dê um typeof() para saber o tipo). Por isso o erro NAN.

>>Em frente e enfrente>>

b-

prompt() always returns a string, whether numbers or characters, with one exception. When the user clicks Cancel or presses the Esc key, prompt() returns null.

https://www.codecademy.com/forum_questions/5575df34937676a0b50000e8

1° console.log() false. v1 === v2 é false, compara 3 number com 3 string

prompt() always returns a string, whether numbers or characters, with one exception. When the user clicks Cancel or presses the Esc key, prompt() returns, null.

https://www.codecademy.com/forum_questions/5575df34937676a0b50000e8

2° console.log() false. v3 nao tem valor (undefined)

3° console.log() NaN - not a number. ele tenta receber o input de uma operacao modulus com numero e string, o que resulta em Nan.

4° console.log() NaN - como conseqeucnia de v1%=v2 acima, v1 recebeu Nan, em vez de um numeral, o q seria esperado de uma operação modulus com 2 numeros reais.

var v1 = 3;

var v2, v3, v4;

v2 = prompt("Digite o número 3:");

v2 = prompt("Digite a palavra true");

v4 = false;

console.log(v1 === v2);

console.log(v2 == v3);

console.log(v1 %= v2);

console.log(v1);

var v1 = 3;

A variável v1 é inicializada com o valor 3.

v2 = prompt("Digite o número 3:");

O prompt solicita ao usuário que digite "3". O valor digitado será armazenado em v2 como uma string. Por exemplo, se o usuário digitar 3, o valor de v2 será "3" (string).

v2 = prompt("Digite a palavra true");

A variável v2 é sobrescrita com o resultado de outro prompt. Se o usuário digitar "true", o valor de v2 será "true" (string).

v4 = false;

A variável v4 é atribuída com o valor booleano false.

Agora vamos ver o que os console.log imprimem:

1. console.log(v1 === v2);

Aqui estamos comparando v1 (que é o número 3) com v2 (que é a string "true") usando o operador de igualdade estrita (===).

A igualdade estrita compara tanto o valor quanto o tipo. Como v1 é um número e v2 é uma string, a comparação retornará false.

Resultado: false

2. console.log(v2 == v3);

Aqui estamos comparando v2 (que é "true", uma string) com v3, que não foi inicializado, então v3 tem o valor undefined.

O operador de igualdade fraca (==) converte os valores para o mesmo tipo antes de comparar, mas como undefined só é igual a null e undefined, a comparação retornará false.

Resultado: false

3. console.log(v1 %= v2);

Esse é o operador de atribuição com módulo (%=). Ele calcula o resto da divisão de v1 por v2 e atribui o resultado a v1.

O valor de v1 é 3, e o valor de v2 é "true". No entanto, v2 é uma string, então durante o cálculo, o JavaScript tenta converter "true" para um número.

Como a conversão de "true" para número resulta em NaN (Not-a-Number), a operação v1 %= v2 será 3 % NaN, o que resulta em NaN.

Resultado: NaN

4. console.log(v1);

Neste ponto, o valor de v1 foi alterado para NaN pela linha anterior.

Resultado: NaN

Resposta correta:

d) false, false, NaN, NaN

Clique para visualizar este comentário

Visualize os comentários desta questão clicando no botão abaixo