NaN原因不明

时间:2014-09-01 10:24:47

标签: javascript nan

在编写一个小项目时,我在打印到控制台时遇到了NaN问题。我认为使用JavaScript代码很容易解决这个问题:

newInt = parseInt(oldInt);

事实并非如此。在读取NaN之后,可以通过多种方式创建它,例如向对象添加数组,或者更常见的是当您尝试从字符串中删除数字时。我说带走因为在字符串中添加一个数字意味着会发生连接。

我的代码可用here。这是一个网站,但我使用出现和消失的div看起来不是。要获得错误,请按"启动冒险"。您可以使用默认值。

在控制台中,您可以通过按 F12 进行访问,它将打印一组起始值。然后它将打印一组起始值,方便地使用以下方法组合在一起:

console.Group();
console.GroupEnd();

之后,当你按下"明年!"它将再打印两组。第一个由函数

创建
plantCrops();

由函数

创建的下一个
buildWells(); 

正如您所看到的,currentCrop注释都是NaN - 尽管通过使用parseInt进行了很多预防措施。有没有什么办法解决这一问题?尽管它应该非常简单,但它似乎很奇怪。

2 个答案:

答案 0 :(得分:3)

您的代码存在许多问题,但与NaN相关的问题在于:

currentCrop = document.getElementById("cropstored");
currentCrop = parseInt(currentCrop);

此代码尝试从对象解析int,这不起作用。

首先获得价值:

currentCrop = document.getElementById("cropstored").value;
currentCrop = parseInt(currentCrop);

但请确保该元素不包含空字符串,因为parseInt会为其返回NaN

parseInt('') -> NaN

实际上,NaN表示该值无法解析为整数,因此您可以将其用作无效数据的指示。

答案 1 :(得分:0)

在JavaScript中

console.log(parseInt(''));

将产生NaN。

如果你添加

console.log('cc'+ currentCrop);
console.log('a' + parseInt(acres));

plantCrops()中,如果文本框中没有提供任何值,您会发现它们都是NaN。

此外,对于currentCrop,我认为这就是弄乱它的路线:

currentCrop = document.getElementById("cropstored");

即使顶部有默认值。

在使用parseInt()运算符进行===调用之前,解决方案将是一个简单的字符串相等性测试:

if(someString === '') 
    defaultValue = ...;
else
    parseInt();