Node.JS / Javascript - 将字符串转换为整数,在我不期望它时返回NaN

时间:2012-06-20 13:41:46

标签: javascript string node.js casting

这完全是在一个更大的程序的背景下,所以我会尝试保持简单,只显示有问题的行。我有一个数组的数组,字符串形式的数字为“84”,“32”等。

然而这条线

console.log(unsolved.length + " " + unsolved[0] + " " + parseInt(unsolved[0]) + " " + parseInt("84"));

打印:

4 "84" NaN 84

“84”是我试图解析的数组元素!然而,除非我把它从数组的上下文中删除并明确地写出来,否则它将无法工作。发生了什么事?

4 个答案:

答案 0 :(得分:11)

您可以尝试使用此函数从要处理的字符串中删除引号:

function stripAlphaChars(source) { 
  var out = source.replace(/[^0-9]/g, ''); 

  return out; 
}

此外,您应明确指定要解析基数为10的数字:

parseInt(unsolved[0], 10);

答案 1 :(得分:7)

parseInt将从其参数的开头看起来像一个数字,并忽略其余部分。在你的情况下,你调用它的参数以"开头,所以没有任何东西看起来像一个数字,它试图转换一个空字符串,这实际上不是一个数字。

答案 2 :(得分:3)

您应该确保数组元素确实是一个可以解析为数字的字符串。您的数组元素不包含值'84',但实际上是值'"84"'(包含由“”封装的数字的字符串)

您需要从数组元素中删除",如下所示:

function removeQuotationMarks(string) {
  return (typeof string === 'string') ? string.replace(/"|'/g, '') : string;
}

unsolved = unsolved.map(removeQuotationMarks);

现在所有数组元素都应该可以使用parseInt(unsolved[x], 10)

进行解析

答案 3 :(得分:0)

首先,我们需要使用正则表达式替换“给”数据并替换,然后我们需要进行强制转换。

var i = 1;
var j = "22"
function stringToNumber(n) {
  return (typeof n === 'string') ? parseInt(Number(n.replace(/"|'/g, ''))) : n;
}

console.log(stringToNumber(i)); // 1
console.log(stringToNumber(j)); // 22