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


69

我正在尝试将req.params转换为Number,因为这是我在架构中为Year param定义的内容。

我试过了

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

Number( req.params.year);

1*req.params.year;

但它们都不起作用。我需要安装一些东西吗?


对不起,我没有看到您发布的其余代码。然后尝试parseInt(req.params.year.replace(/ [^ 0-9] / g,''),10)
Serhan Oztekin


您可以管理req.params.year并让我知道您得到了什么。
Hiren S.

要求 婴儿车.year或req。参数。年?
Krzysztof Safjanowski

是的,这是一个打字错误
user3488862

Answers:


131

您不必安装任何东西。

parseInt(req.params.year, 10);

应该正常工作。

console.log(typeof parseInt(req.params.year)); // returns 'number'

如果使用parseInt,输出是什么?还是字符串吗?


5
我想您使用快递吧?我从未使用过此程序包,但是可能是,params只是只读的吗?如果创建自己的变量,该怎么办?var p = parseInt(req.params.year);
塔斯克(Tusk)

有什么不同?为什么以这种方式工作?抱歉,我正在学习nodejs,所以很好奇。
桑Đặ16年

4
@SangĐặng没有区别。变量req.params由express-package创建,并将其设置为只读。因此,您必须声明一个自己的读写变量。
塔斯克(Tusk)

啊,这就是为什么他不能在第一次尝试中就把它放回去(在上面的问题中)。谢谢您的帮助。
桑Đặ16年

9

使用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

我不确定你的vor幸。我给出了基于节点版本v10.2.1的输出。
tejp124

在节点13.8上parseInt('123abc')-> 123
Ryan

3

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.