Compare if variable is number within an if

Asked

Viewed 857 times

3

Having

var chute = Math.round(parseInt(prompt("Adivinhe em qual número estou pensando")));
var numeroPensado = Math.round(Math.random() * 100);

if(chute != numeroPensado){
    document.write("Que pena, você errou, o número em que eu pensei era " + numeroPensado);
}else if(chute == numeroPensado){
    document.write("Parabéns, você acertou !");
}else{
    document.write("Ops! Devido a algum erro, não pude receber seus dados, certifique-se de colocar números, de preferência, inteiros")
}

If the user types a text, it enters the first condition, but wanted it to enter the else. I tried to use something like chute = typeof 1 within the if, but it didn’t work.

4 answers

4

You can use Javascript’s isNaN function: http://www.w3schools.com/jsref/jsref_isnan.asp

isNaN(123) //false
isNaN(-1.23) //false
isNaN(5-2) //false
isNaN(0) //false
isNaN('123') //false
isNaN('Hello') //true
isNaN('2005/12/12') //true
isNaN('') //false
isNaN(true) //false
isNaN(undefined) //true
isNaN('NaN') //true
isNaN(NaN) //true
isNaN(0 / 0) //true

4

First, a if that tests if something is the same and has a else if if it’s different, there’s no way there’s a third option, or it’s the same or it’s different, then the else would never be executed. Anyway it is good to separate what is data entry validation and what is "business decision".

Second, to verify that something typed is a number you have to do this by explicitly checking, with isNaN():

var chute = Math.round(parseInt(prompt("Adivinhe em qual número estou pensando")));
if (!isNaN(chute)) document.write("Ops! Devido a algum erro, não pude receber seus dados, certifique-se de colocar números, de preferência, inteiros")
var numeroPensado = Math.round(Math.random() * 100);
if (chute != numeroPensado) document.write("Que pena, você errou, o número em que eu pensei era " + numeroPensado);
else document.write("Parabéns, você acertou !");

I put in the Github for future reference.

  • Now both messages appear

  • I’d forgotten about the denial operator. Anyway the correct thing is to get out of this code if you typed something wrong, but I don’t know how to solve without seeing the general context, it can be break or a return, eventually it could be something else.

2


That alone solves:

var chute = Math.round(parseInt(prompt("Adivinhe em qual número estou pensando")));
var numeroPensado = Math.round(Math.random() * 100);

if(chute != numeroPensado && !isNaN(chute)){
    document.write("Que pena, você errou, o número em que eu pensei era " + numeroPensado);
}else if(chute == numeroPensado && !isNaN(chute)){
    document.write("Parabéns, você acertou !");
}else{
    document.write("Ops! Devido a algum erro, não pude receber seus dados, certifique-se de colocar números, de preferência, inteiros")
}

1

var chute = Math.round(parseInt(prompt("Adivinhe em qual número estou pensando")));
var numeroPensado = Math.round(Math.random() * 100);

if(chute != numeroPensado && !isNaN(chute)){
    document.write("Que pena, você errou, o número em que eu pensei era " + numeroPensado);
}else if(chute == numeroPensado){
    document.write("Parabéns, você acertou !");
}else{
    document.write("Ops! Devido a algum erro, não pude receber seus dados, certifique-se de colocar números, de preferência, inteiros")
}

Make Sure It’s Not a Number. Not to NUmber.

isNan()

Browser other questions tagged

You are not signed in. Login or sign up in order to post.