打印到控制台时为NaN,但typeof为数字jquery

NaN when printing to console but typeof is number jquery

本文关键字:typeof 数字 jquery NaN 控制台 打印      更新时间:2023-09-26

我正在实现一个计时器,并试图找出为什么当在输入"秒"框中输入大于60的数字时,我不能更改"min"输入框的内容。当我打印"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>    

尽管名称"不是数字",但typeof NaN就是"number"。是的,真的。:-)NaNInfinity一样,属于数字类型。它是为IEEE-754中的数字定义的(JavaScript和许多其他编程语言使用的浮点数格式;特别是,JavaScript使用现在所称的"二进制64子格式",也就是"双精度")。

如果您对无法解析的内容调用parseInt,它将返回NaN。例如:

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

如果你想在mins(等)为空时使用0,你可以使用JavaScript功能强大得出奇的||操作符:

mins = parseInt( $("#min").val() ) || 0;

这将为您提供返回的编号parseInt,如果parseInt返回0NaN,则为0


旁注:

  1. 如果要使用parseInt进行用户生成的输入解析,您可能需要使用它的第二个参数,该参数告诉它要使用的基数(10,表示十进制)。例如,n = parseInt(str, 10)。否则,它会尝试根据输入进行猜测(大多数情况下,它将以0x开头的字符串视为十六进制)。

  2. parseInt很乐意忽略数字后面的额外字符。例如CCD_ 19给了我们CCD_ 20。如果您不想要这种行为,可以使用+n = +str;)或Numbern = Number(str)),这两种方法都考虑整个字符串。但它们都接受0x在开头表示十六进制,并且不支持使用基数。