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, ''));

编辑parseInt()的基础):
在评论的基础上,您还应该记住始终指定要解析输入的数字基础。在您的情况下,您需要以 10 为底(或“十进制”)。这被指定为第二个参数parseInt()

var number = parseInt(value, 10);

或者

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