猜数字小案例中,在网页文本框中输入带引号的数字,为什么isNaN的判断为true,比如手动输入"5.6"。如果将文本创获得的数据在控制台输出,也会是"5.6",但是判断会为true。
如果直接在浏览器控制台输出console.log(isNaN("5.6"))则为false
为什么判断结果会不同?var s = parseInt(Math.random()*100);
function guess() {
var n = document.getElementById("input").value;
var span = document.getElementById("result");
console.log(n);
console.log("5.6");
if(isNaN(n)){
console.log("请输入数字!");
} else {
var num = parseInt(n);
if(num==s){
span.innerHTML="猜对了!";
} else if(num>s){
span.innerHTML="猜大了!";
} else {
span.innerHTML="猜小了!";
}
}
}

解决方案 »

  1.   

    后面再看的时候碰到类似的问题了,文本框接受的的数据类型为String。输入"5.6",应该相当于自己定义一个变量s='   " 5.6 "       '
      

  2.   

    你用num 接收输入框的值的时候用了parseint
      

  3.   

    你在文本框输入的引号是做为字符串中一个字符内容。等同于 n='"5.6"'
    isNaN('"5.6"')当然是true
      

  4.   

    建议你查看下isNaN的定义,
    NaN 属性是代表非数字值的特殊值。该属性用于指示某个值不是数字.
    你在文本框输入“5.6”.该文本框的value值为value=“"5.6"”
    isNaN判断"5.6"不是数值,所以返回true
      

  5.   

    isNaN 在判断前会隐藏式的做一下Number()的数值转换工作。Number('"123"') //NaN
    Number('123a') //NaN
    parseInt('"123"') //NaN
    parseInt('123a') //123所以,正则判断用户输入情况是否更好一些,或者使用 <input type="number" />