0

答えは明白かもしれませんが、私にはわかりません

JavaScript オブジェクト virtualTable があります。私は書きます :

parseInt(virtualTable["resource_" + resourceId])

戻りますNaN

アラートで確認virtualTable["resource_" + resourceId]したら答えは「690」

警告すると正常にparseInt("690")動作し、690 が返されます

それでは何が問題なのですか?

コード全体:

if(!virtualTable.hasOwnProperty("resource_" + resourceId)) {
    virtualTable["resource_" + resourceId] = "\"" + minutesToFill + "\"";
}

var timeForTarget = (target.end.getTime() - target.start.getTime()) / 60000;
var timeInVirtualTable;
var tooltipInTarget

if(virtualTable["resource_" + resourceId].indexOf("_") == -1) {
    timeInVirtualTable = parseInt(virtualTable["resource_" + resourceId]);
    tooltipInTarget = "";
} else {
    timeInVirtualTable = parseInt(virtualTable["resource_" + resourceId].substring(0, virtualTable["resource_" + resourceId].indexOf("_")));
    tooltipInTarget = virtualTable["resource_" + resourceId].substring(virtualTable["resource_" + resourceId].indexOf("_"));
}
4

1 に答える 1

7

あなたの声明によると、

virtualTable ["resource_" + resourceId]をアラートで確認すると、答えは「690」です。

内部の値は、引用符を含めてvirtualTable["resource_" + resourceId]文字通りであると想定しています。"690"このため、これはNaN数値ではありません(先頭の二重引用符による)。

これが一般的な入力である場合は、以下を使用して、parseIntの呼び出し前(または呼び出し中)に値から二重引用符を取り除くことができますreplace()

var value = virtualTable["resource_" + resourceId].replace(/"/g, '');
var number = parseInt(value);

また:

var number = parseInt(virtualTable["resource_" + resourceId].replace(/"/g, ''));

EDITparseInt()'s base):
コメントに基づいて、入力を解析する数値ベースを常に指定することも忘れないでください。あなたの場合、基数10(または「10進数」)が必要です。これは、次の2番目のパラメーターとして指定されますparseInt()

var number = parseInt(value, 10);

また

var number = parseInt(virtualTable["resource_" + resourceId].replace(/"/g, ''), 10);
于 2012-12-04T17:06:30.757 に答える