parseInt无法按预期工作

时间:2012-12-04 16:54:06

标签: javascript

答案可能很明显,但我没有看到

我有一个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("_"));
}

1 个答案:

答案 0 :(得分:7)

根据你的陈述,

  

我用一个警告检查virtualTable [“resource_”+ resourceId]   答案是“690”

我假设virtualTable["resource_" + resourceId]内的值实际上是"690",包括引号。因此,它是NaN,或者不是数字(由于领先的双引号)。

如果这是常见输入,您可以在使用replace()调用parseInt之前(或期间)从您的值中删除双引号:

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

或:

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

编辑parseInt()的基础):
在注释的基础上,您还应该记住始终指定数字库来解析输入。在您的情况下,您需要base-10(或“decimal”)。这被指定为parseInt()的第二个参数:

var number = parseInt(value, 10);

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