我有这个代码来总结3个数字所以i + j + k但我得到的结果是Nan
这是代码:
var i = req.param('1', null);
i = parseInt(i);
var j = req.param('2', null);
j = parseInt(j);
var k = req.param('3', null);
k = parseInt(k);
var r = i+j+k;
res.render('index', {result:r});
这是基于节点的js
答案 0 :(得分:3)
req.param('2', null)
将返回null
。
然后,您拨打parseInt(null)
,即NaN
如果您使用NaN
添加任意号码,则会获得NaN
。
使用req.param('2', 0)
代替
答案 1 :(得分:1)
如果计算中的任何值为NaN
,您会看到NaN
。在您的示例中,大概i
,j
和/或k
为NaN
。你需要看看它是什么。请注意,parseInt
可以返回NaN
(例如,parseInt(null)
是NaN
)。
附注:使用parseInt
时,最好包含基数,例如: parseInt(i, 10)
而不仅仅是parseInt(i)
。这样,parseInt
就不会猜到基数(数字基数)。
答案 2 :(得分:1)
当JavaScript使用parseInt
将字符串转换为int时,它会读取每个字符,直到它看到非数字字符。空白字符串(''
)不是数字字符,因此会转换为NaN
。
示例:
parseInt('ABC', 10); // NaN
parseInt('123ABC', 10); // 123
因此,您需要确保输入不是空白;确保它实际上是一个数字。
P.S。我建议将第二个参数添加到parseInt
,它告诉它使用什么基础。如果它被排除,它会尝试猜测。有时这会导致问题:
parseInt('12'); // 12 (base 10)
parseInt('012'); // 10 (the leading '0' makes it base 8 [octal])
parseInt('012', 10); // 12. forced to be base 10
答案 3 :(得分:0)
如果三个变量中的一个是NaN,那么它不会添加,而是连接。为每个变量执行console.log或alert,以查找各个值以查看哪个不是数字。
编辑...哎呀,我刚看到你已经强迫他们整数了。这很好。所以错误实际上发生在那一步......你的一个(或多个)值不是数字,因此不能强制为整数。