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++ が呼び出されたときにのみ表示されますが、ループ条件が失敗するため、2 番目のケース (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 に答える