parseInt 用于解析数字字符串的替代方法

parseInt Alternatives for parsing numerical strings

提问人:Fabrício Matté 提问时间:6/17/2012 更新时间:6/17/2012 访问量:1892

问:

假设我有一个数字字符串:

var foo = "0";

假设我想将其解析为一个数字,并递增它以分配值(只是一个算术示例),我知道我可以做到:bar

var bar = parseInt(foo, 10)+1;

但我相信上面的例子可以更简单、更易读。请看这个例子:

//alternative 1
var bar = +foo+1;

还有这个:

//alternative 2
var bar = ++foo;

这两者也将产生相同的结果(后者也会递增,但这没问题)。barfoo

我的问题是,通过使用这些替代方案之一,我是否会将我的代码暴露在不指定 / 的情况下使用 parseInt 的相同可能的与实现相关的缺陷?radixbase

或者这些也可以安全使用吗?

用于测试的小提琴

JavaScript的

评论

3赞 Phrogz 6/17/2012
stackoverflow.com/a/4606789/405017
1赞 Karl Nicoll 6/17/2012
就我而言,IS 是该声明最易读的形式。var bar = parseInt(foo, 10) + 1
0赞 Phrogz 6/17/2012
你的数字字符串的来源是什么?用户提供的输入?
1赞 Phrogz 6/17/2012
可能的重复 使用此方法将字符串转换为整数是否有任何副作用
1赞 Rob W 6/17/2012
@FabrícioMatté 是的。前缀 0 = 八进制,前缀 = 十六进制。否则,它是基于 10(十进制)的。前缀的零通常是错误的来源(例如,当使用 0 填充时)。因此,不鼓励/弃用前缀零(在严格模式下,会抛出错误):-> “SyntaxError:不推荐使用八进制文字和八进制转义序列”0x'use strict'; 01

答:

3赞 Oleg 6/17/2012 #1

从可读性和可维护性的角度来看是最佳选择。它清楚地告诉了它做什么,并且可靠地做到了parseInt

明天,当一个开发人员同事加入这个项目时,几个月后你自己就会看你自己的代码,或者如果你突然决定增加十个而不是一个,你使用起来的麻烦就会减少。parseInt

另外,试试 JSLint。这是值得的。

评论

1赞 Fabrício Matté 6/17/2012
是的,在阅读了所有评论之后,它似乎更具可读性和可维护性,而且我也主要从事小组项目。谢谢大家的帮助。parseInt
0赞 Rob W 6/17/2012
我推荐 JSHint 而不是 JSLint,因为它允许更多的过滤器。JSLint 抱怨太多了。
0赞 Oleg 6/17/2012
@RobW我认为这是个人喜好的问题。我们都可以自由选择最适合的。我更喜欢 JSLint,因为它更严格,而且我认为 Douglas 在那里做了很多很好的思考。此外,您还可以在其中禁用很多检查。