为什么这个JavaScript floor数学代码返回nan?

时间:2013-10-18 17:37:03

标签: javascript math floor

var num = Math.floor(document.getElementById("num").innerHTML);
document.getElementById("num").innerHTML = num+1;
}
else{
document.getElementById("num").innerHTML = num-1;
}

不幸的是,我得到了$ NaN!

跨度的内容是<span id="num">0</span>,你知道,没什么特别的,我必须做一些蠢事,所以我完全糊涂了!

谢谢你。

3 个答案:

答案 0 :(得分:0)

.innerHTML返回一个字符串。字符串不能.floor。您必须先parseInt()

答案 1 :(得分:0)

显示的代码不完整,无法跟踪。但我假设NaN正在传递给Floor()开始。将有效的数字/数字字符串传递给floor()以使其正常工作。错误在于问题中未显示的代码逻辑。

编辑:

查看代码之后很明显问题是由于错误的赋值操作造成的。如果调用'if'部分,一切都很好,但是如果调用'else'部分,则永远不会创建'num'或为其赋值,从而导致它为NaN。要解决这个问题,我建议你这样做:

改变这个:

if(document.getElementById("div").style.top === "40px"){
    var num = Math.floor(document.getElementById("num").innerHTML);
    document.getElementById("num").innerHTML = num+1;
}
else{
    document.getElementById("num").innerHTML = num-1;
}

对此:

var num = Math.floor(document.getElementById("num").innerHTML);
if(document.getElementById("div").style.top === "40px"){
    document.getElementById("num").innerHTML = num+1;
}
else{
    document.getElementById("num").innerHTML = num-1;
}

答案 2 :(得分:0)

您的完整代码显示-1为什么不起作用

if (document.getElementById("div").style.top === "40px") {
    var num = Math.floor(document.getElementById("num").innerHTML);
    document.getElementById("num").innerHTML = num + 1;
} else {
    document.getElementById("num").innerHTML = num - 1;
}

那么undefined - 1是什么?那是NaN!为什么?因为num是在if中设置的,而不是else。

你是如何解决的?将var num行移到if之外!