为什么对于可被10整除的数字,字符串到int之间的转换不能像预期的那样工作

Why conversions between string to int not working as expected for numbers divisible by 10?

本文关键字:不能 转换 之间 工作 int 字符串 于可 为什么 数字      更新时间:2023-09-26

如果在"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");

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

"100"<="102"

但"99">"100"

只有在调用j++时才会出现转换,但对于第二种情况(99-100),由于循环条件失败,转换从未发生。

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);
        }
    }
}

它有效吗?

这是一个类型转换问题,它与比较有关。将字符串传递给函数,拆分字符串,然后进行比较。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);
        }
    }
}