0

如果在“for”循环中使用 parseInt,它适用于所有情况。但在此示例中,对于 99-100 或 999-1000 等情况,它无法正常工作。这里会发生什么?隐式转换是错误的吗?

function buggy10000(value)
{
    var r = value.split("-");
    var len=r.length;
    var j;
    if(len==2)
    {
        console.log("For in RANGE " + r[0]+"<-->"+r[1]);
        for(j=r[0];j<=r[1];j++)
        {
            console.log(j);
        }
    }

}

buggy10000("98-99");
buggy10000("99-100");  //for not working as expected
buggy10000("100-102");
4

3 回答 3

6

因为:“98”<=“99”(字符串比较)

“100”<=“102”

但是“99”>“100”

转换仅在调用 j++ 时出现,但对于从未发生过的第二种情况 (99-100),因为循环条件失败。

于 2012-04-04T20:28:25.480 回答
0
function buggy10000(value)
{
    var r = value.split("-");
    var len=r.length;
    var j;
    if(len==2)
    {
        console.log("For in RANGE " + r[0]+"<-->"+r[1]);
        for(j=r[0]*1;j<=r[1]*1;j++) <----Modified
        {
            console.log(j);
        }
    }

}

它有效吗?

于 2012-04-04T20:30:35.917 回答
0

这是一个类型转换问题,它与比较有关。您将字符串传递给您的函数,拆分字符串,然后比较它们。当您比较字符串而不是整数时,JS 会感到困惑。

我按如下方式重写了您的函数,以将这些值显式解析为整数,并且它现在按您期望的方式工作。

function buggy10000(value)
{
    var r = value.split("-");
    var len=r.length;
    var j;
    if(len==2)
    {
        console.log("For in RANGE " + r[0]+"<-->"+r[1]);
        r[0] = parseInt(r[0]);
        r[1] = parseInt(r[1]);
        for(j=r[0];j<=r[1];j++)
        {
            console.log(j);
        }
    }

}
于 2012-04-04T20:30:57.760 回答