将字符串转换为number node.js
我正在尝试将req.params转换为Number,因为这是我在模式中为year param定义的 我试过了将字符串转换为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.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))`inapp.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