答案可能很明显,但我没有看到
我有一个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("_"));
}
答案 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);