打印到控制台时的NaN但是typeof是数字jquery

时间:2015-03-27 17:00:35

标签: javascript jquery nan typeof

我正在实施一个计时器,并试图找出为什么我无法改变我的" min"输入框中输入大于60的数字时输入框"秒"框。当我打印" mins"的值时,我得到NaN,但是当我打印它的类型时,我得到它的数字。我刚开始使用JavaScript,所以任何帮助都会受到赞赏。谢谢:))

jQuery的:

$(function(){
    $("#sec").change(function(){
        if($("#sec").val() >= 60){
            secs = parseInt( $("#sec").val() );
            console.log("secs is " + secs );

            if(secs < 0){
                alert("Please enter a valid time interval");
                $("#sec").val("");
                return;
            }

            mins = parseInt( $("#min").val() );
            console.log("mins is " + mins );
            console.log(typeof mins);
            hours = parseInt( $("#hour").val() );
            days = parseInt( $("#day").val() );

            secs = secs % 60;
            mins = mins + Math.floor(secs/60);//can be > 60
            console.log("mins is " + mins );
            console.log(typeof mins);
            hours += mins/60;
            days += hours/24;
            $("#min").val(mins);
            $("#hour").val(hours + mins/60);
            $("#day").val(days + hours/24);
        }
    });
});

HTML:

div class="left"></div>
    <div class="center">
        <h3> Please enter a time: </h3>
        <form class="form-inline">

            <div class="form-group col-xs-2">
                <input id="day" class="form-control input-sm input" type="number" value="" name="Days" placeholder="Days">
            </div>
            <div class="form-group col-xs-2">
                <input id="hour" class="form-control input-sm input" type="number" value="" name="Days" placeholder="Hours">
            </div>
            <div class="form-group col-xs-2">
                <input id="min" class="form-control input-sm input" type="number" value="" name="Days" placeholder="Minutes">
            </div>
            <div class="form-group col-xs-2">
                <input id="sec" class="form-control input-sm input" type="number" value="" name="Days" placeholder="Seconds">
            </div>    

1 个答案:

答案 0 :(得分:9)

尽管名称“不是数字”,但typeof NaN"number"。对真的。 :-) NaN,与Infinity一样,是数字类型。它是为IEEE-754中的数字定义的(浮点数格式JavaScript和许多其他编程语言使用;具体来说,JavaScript使用现在称为“binary64子格式”,又称“双精度”)。

如果您对无法解析的内容发送parseInt,则会返回NaN。例如:

var n = parseInt("");
console.log(typeof n); // "number"
console.log(n);        // "NaN"

如果您想0 mins使用mins = parseInt( $("#min").val() ) || 0; (空白时),可以使用JavaScript's curiously-powerful || operator执行此操作:

parseInt

这会返回0返回的号码,如果parseInt返回0NaN,则会parseInt


附注:

  1. 如果你要使用n = parseInt(str, 10)进行用户生成的输入解析,你可能想要使用它的第二个参数,它告诉它使用什么数字基数(10,十进制)。例如,0x。否则,它会尝试从输入中猜测(主要是,它将以parseInt开头的字符串视为十六进制)。

  2. str = "4 apples"; n = parseInt(str)会很乐意忽略数字后面的额外字符。例如,n = 4为我们提供+。如果您不想要这种行为,可以使用n = +str;Number)或n = Number(str)0x),两者都考虑整个字符串。但是他们在开头都接受{{1}}表示十六进制,并且不支持使用基数(数字基数)。