Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Dados Fundamentais (Number e String)

Bom dia.

Estou atualmente na aula de math.random() e analisando o código me veio uma dúvida referente a utilização dos operadores de comparação.

while(chute != numeroSecreto){
    chute = prompt("Escolha um número entre 1 e 10.");

Nesta linha do código, se a pessoa digitar o número, o javaScript entende que este dado seria uma string certo? Como então o javaScript consegue entender que essa string, ao ser comparada com o valor number que foi declarado na variável numeroSecreto, não são diferentes? Pois se o valor é uma string, então mesmo que a pessoa digite o número 5 que seria o valor correto do numeroSecreto, o javaScript entenderia que esta errado. O operador faz alguma conversão automática?

Obrigado!

2 respostas
solução!

Oi, Rafael! Como vai?

Sim, o JavaScript faz uma conversão automática quando usamos o operador != (diferente) sem o sinal duplo de igualdade estrita (!==).

Vê isso:



let numeroSecreto = 5;
let chute = prompt("Digite um número:");

if (chute == numeroSecreto) {
  console.log("Acertou!");
} else {
  console.log("Errou!");
}

Mesmo que o prompt retorne uma string (como "5"), o == faz uma conversão implícita de tipo. Ou seja, o JavaScript converte "5" em número automaticamente antes de comparar com 5.

Agora, se você usasse ===, a comparação não daria certo:



let numeroSecreto = 5;
let chute = prompt("Digite um número:");

if (chute === numeroSecreto) {
  console.log("Acertou!");
} else {
  console.log("Errou!");
}

Nesse segundo caso, o resultado seria "Errou!", porque "5" (string) !== 5 (number).

Por isso, muita gente prefere converter o valor digitado com parseInt() ou Number() para evitar confusão:



let numeroSecreto = 5;
let chute = parseInt(prompt("Digite um número:"));

if (chute === numeroSecreto) {
  console.log("Acertou!");
} else {
  console.log("Errou!");
}

Resumo:

  • == converte tipos automaticamente
  • === exige que o tipo seja igual também
  • prompt sempre retorna string, então vale a pena usar parseInt()

Espero ter ajudado. Conte com o apoio do Fórum na sua jornada. Fico à disposição.

Abraços e bons estudos!

  Caso este post tenha lhe ajudado, por favor, marcar como solucionado

Entendi Lorena, explicação bem completa e fácil de entender. Vou seguir sua sugestão e utilizar o parseInt().

Vlw!