将字符串转换为number node.js

将字符串转换为number node.js,node.js,string,type-conversion,Node.js,String,Type Conversion,我正在尝试将req.params转换为Number,因为这是我在模式中为year param定义的 我试过了 req.params.year = parseInt( req.params.year, 10 ); 及 及 但它们中没有一个起作用。 我需要安装什么吗?您不必安装什么 parseInt(req.params.year, 10); 应该能正常工作 console.log(typeof parseInt(req.params.year)); // returns 'number'

我正在尝试将req.params转换为Number,因为这是我在模式中为year param定义的

我试过了

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

但它们中没有一个起作用。
我需要安装什么吗?

您不必安装什么

parseInt(req.params.year, 10);
应该能正常工作

console.log(typeof parseInt(req.params.year)); // returns 'number'
如果使用parseInt,您的输出是什么?它仍然是一个字符串吗?

使用parseInt()是个坏主意,主要是因为它从不失败。也因为有些结果可能是意外的,比如在无穷大的情况下。
下面是处理意外行为的函数

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的信息,它仍然非常有效。Express根本不允许修改req或res对象(不可变)。因此,如果您想有效地修改/使用此数据,必须将其复制到另一个变量(var year=req.params.year)。

很抱歉,我没有看到您发布的其余代码。然后尝试parseInt(req.params.year.replace(/[^0-9]/g'),10)可能与您的控制台req.params.year重复,并告诉我您得到了什么。婴儿车。年份或需求。参数。年份?是的,那是打字错误。我想你用的是express,对吗?我从来没有用过这个软件包,但它可能是只读的吗?如果您创建自己的变量,会发生什么<代码>变量p=parseInt(要求参数年份)有什么不同?为什么它是这样工作的?“对不起,我在学nodejs,所以我很好奇。”桑Đ说ặ没有区别。变量req.params由express软件包创建,并设置为只读。所以你必须声明一个自己的读写变量。啊,这就是为什么他不能在第一次尝试时把它放回去(在上面的问题中)。谢谢你的帮助。我得到
ReferenceError:parseint没有用`const{a}=req.body定义
;console.log(parseint(a))`in
app.post
。parseInt是这样写的,我的错。这不太正确。parseInt('123abc')抛出一个错误,它没有验证为数字123。我不确定您的环境。我已经给出了基于节点版本v10.2.1的输出,在节点13.8 parseInt('123abc')->123上
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