0

我有这个代码来总结 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

4

4 回答 4

3

req.param('2', null)null如果未指定参数,则返回。

然后你打电话parseInt(null)NaN

如果你添加任何数字NaN,你会得到NaN


req.param('2', 0)改为使用

于 2012-05-25T14:20:04.517 回答
1

您将看到NaN计算中的任何值是否为NaN. 在您的示例中,大概i,j和/或是. 你需要看看它是什么。请注意,可以返回(例如is )。kNaNparseIntNaNparseInt(null)NaN


旁注:几乎总是最好在使用时包含基数parseIntparseInt(i, 10)而不是仅仅包含parseInt(i). 这样,parseInt就不会猜测基数(数字基数)。

于 2012-05-25T14:18:30.057 回答
1

当 JavaScript 使用 将字符串转换为 intparseInt时,它会读取每个字符,直到它看到一个非数字字符。空白字符串 ( '') 是非数字的,因此它被转换为NaN.

例子:

parseInt('ABC', 10); // NaN
parseInt('123ABC', 10); // 123

因此,您需要确保输入不是空白;确保它实际上是一个数字。

PS我建议将第二个参数添加到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
于 2012-05-25T14:27:55.690 回答
0

如果三个变量之一是 NaN,那么它不是添加,而是连接。对每个变量执行 console.log 或 alert 以查找各个值以查看哪个不是数字。

编辑...哎呀,我刚刚看到您已经将它们强制为整数。这很好。因此,错误实际上发生在该步骤...您的一个(或多个)值不是数字,因此不能强制为整数。

于 2012-05-25T14:19:04.923 回答