Javascript - 变量号不会上升

时间:2013-01-14 21:48:40

标签: javascript variables

我一直在制作这个小脚本,出于某种原因,其中一个变量不会增加它的价值。

代码如下所示:

function get_swf(mode){
var swf_path;
swf_update(); //Updating max_num
if (location.hash) current = location.hash.replace(/[^0-9.]/g, ""); //Getting only numbers

switch(mode){
case "random":
    current = Math.floor((Math.random() * max_num) + 1);
    swf_path = "uploads/" + current + ".swf";
break;

case "next":
    current += 1;
    if(current > max_num) current = 1;
    swf_path = "uploads/" + current + ".swf";
break;  
case "previous":
    current -= 1;
    if(current == 0) current = max_num;
    swf_path = "uploads/" + current + ".swf";
break;
}
swfobject.embedSWF(swf_path, "lolswf", "800", "400", "9.0.0");
location.hash = current;

}

此代码位于函数中,变量:currentmax_num是全局变量。 一切都按预期工作,除非调用“next”案例。在这种情况下,即使变量current尚未达到max_num,它也会设置为值“1”。例如,如果我设置:

max_num = 5current = 2

我将“next”current设置为1。

我无法理解它,你能帮助我吗?

非常感谢!

修改

在进一步检查我的代码之后,我发现了一行似乎会破坏代码。 这一行高于我提供的代码。 (我已将代码更新为整个函数,因此您可以看到)

if (location.hash) current = location.hash.replace(/[^0-9.]/g, ""); //Getting only numbers

我对此行的期望是,它只是覆盖current变量,因此用户并不总是必须从头开始。但是,为什么current的值为“1”,即使它应该增加?为什么其他案例会按预期工作?

非常感谢你的时间!

3 个答案:

答案 0 :(得分:1)

变量:

location.hash

如果是整数变量,则不支持replace方法。 Replace方法是字符串的属性。

现在,执行以下行:

if (location.hash) current = location.hash.replace(/[^0-9.]/g, ""); //Getting only numbers

它实际上将变量current转换为空或0。

现在在带有'next'大小写的switch部分中,只有两个语句对current进行操作:

  1. 它递增电流,即0 + 1 = 1

  2. 检查是否超过最大值,将其设置为1

  3. 在任何一种情况下,你当前都会获得1分。

    希望有所帮助。

答案 1 :(得分:0)

您需要使用if和path变量交换位置。 你所做的是将当前设置为1,然后将其添加到你的swf_path字符串。

case "next":
    current += 1;
    swf_path = "uploads/" + current + ".swf";
    if(current > max_num) current = 1;
break;

<强>更新

看起来你和以前一样做了同样的事情。在那里使用相同的修复

答案 2 :(得分:0)

如果你只是使用整数

,模数总是一个选项
 case "next":
    current = (current+1)%(max_num+1); // the modulus rollover
    if(current == 0) current = 1; // in the case that the remainder is 0
    swf_path = "uploads/" + current + ".swf";
 break;