将字符串转换为数字Node.js

90

我试图将req.params转换为数字,因为这是我在年份参数的模式中定义的内容。

我已经尝试过

req.params.year = parseInt( req.params.year, 10 );  

Number( req.params.year);

1*req.params.year;

但是它们都不起作用。我需要安装什么吗?


可能是 JavaScript "parseInt()" 的问题 的重复。 - Krzysztof Safjanowski
你能在控制台输出 req.params.year 并让我知道你得到了什么吗? - Hiren S.
需要使用 req. params .year 还是 req. prams .year? - Krzysztof Safjanowski
是的,那是一个打字错误。 - user3488862
你能展示一个带有服务器代码和curl或浏览器调用的完整例子吗? - Timo
显示剩余2条评论
4个回答

159

您无需安装任何东西。

parseInt(req.params.year, 10);
应该正常工作。
console.log(typeof parseInt(req.params.year)); // returns 'number'

如果使用parseInt,你的输出将会是什么?它还是一个字符串吗?


5
我认为你正在使用Express对吧?我从未使用过这个包,但是参数是否只读呢?如果您创建自己的变量会怎样呢?例如:var p = parseInt(req.params.year); - Tusk
有什么不同吗?为什么它会以这种方式工作?抱歉,我正在学习Node.js,所以很好奇。 - Sang Dang
4
没有区别。变量req.params是由express包创建的,它是只读的。因此,您需要声明一个自己的可读写变量。 - Tusk
啊,这就是为什么他在第一次尝试中无法放回去(在他上面的问题中)。谢谢你的帮助。 - Sang Dang
我在app.post中使用const { a } = req.body; console.log(parseint(a))时,出现了ReferenceError: parseint未定义的错误。实际上,parseInt应该是这样写的,这是我的错误。 - Timo

14

使用parseInt()是一个不好的主意,主要是因为它永远不会失败。另外,一些结果可能是意想不到的,例如在INFINITY的情况下。
以下是处理意外行为的函数。

function cleanInt(x) {
    x = Number(x);
    return x >= 0 ? Math.floor(x) : Math.ceil(x);
}

查看下面测试用例的结果。

console.log("CleanInt: ", cleanInt('xyz'), " ParseInt: ", parseInt('xyz'));
console.log("CleanInt: ", cleanInt('123abc'), " ParseInt: ", parseInt('123abc'));
console.log("CleanInt: ", cleanInt('234'), " ParseInt: ", parseInt('234'));
console.log("CleanInt: ", cleanInt('-679'), " ParseInt: ", parseInt('-679'));
console.log("CleanInt: ", cleanInt('897.0998'), " ParseInt: ", parseInt('897.0998'));
console.log("CleanInt: ", cleanInt('Infinity'), " ParseInt: ", parseInt('Infinity'));

结果:

CleanInt:  NaN  ParseInt:  NaN
CleanInt:  NaN  ParseInt:  123
CleanInt:  234  ParseInt:  234
CleanInt:  -679  ParseInt:  -679
CleanInt:  897  ParseInt:  897
CleanInt:  Infinity  ParseInt:  NaN

这不是很正确的。parseInt('123abc')会抛出一个错误,它不能被验证为数字123。 - DoArNa
我不确定你的环境。我已经根据Node版本v10.2.1给出了输出。 - tejp124
1
在节点13.8上,parseInt('123abc') -> 123。 - Ryan

3

不是完整的答案 好的,这只是补充关于parseInt的信息,它仍然非常有效。Express不允许修改req或res对象(不可变)。因此,如果您想有效地修改/使用此数据,必须将其复制到另一个变量中(var year = req.params.year)。


3
您可以通过几种方式将字符串解析为数字。
- Number() - parseInt() - parseFloat() 示例: Number("256.123") //返回 256.123 Number("252px") //返回 NaN parseInt("256.123") //返回 256 parseInt("256px") //返回 256 parseFloat("256") //返回 256 parseFloat("256.123") //返回 256.123 parseFloat("256.23px") //返回 256.23

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接