我如何解决JavaScript的parseInt八进制行为?

尝试在JavaScript中执行以下操作:

parseInt('01'); //equals 1
parseInt('02'); //equals 2
parseInt('03'); //equals 3
parseInt('04'); //equals 4
parseInt('05'); //equals 5
parseInt('06'); //equals 6
parseInt('07'); //equals 7
parseInt('08'); //equals 0 !!
parseInt('09'); //equals 0 !!

我刚刚学会了JavaScript认为前导零表示八进制整数的难题,并且由于基数8中没有"8""9" ,函数返回零。 喜欢与否,这是设计。

什么是解决方法?

注意:为了完整起见,我即将发布解决方案,但这是我讨厌的解决方案,所以请发布其他/更好的答案。


更新:

JavaScript标准(ECMA-262)的第5版引入了一个突破性的改变,消除了这种行为。 Mozilla的写法很好。


这是一个简单的解决方案常见的Javascript陷阱:

只需指定基地或“基数”,如下所示:

parseInt('08',10); // 8

你也可以使用Number:

Number('08'); // 8

如果你知道你的值将在有符号的32位整数范围内,那么~~x将在所有场景中做正确的事情。

~~"08" === 8
~~"foobar" === 0
~~(1.99) === 1
~~(-1.99)  === -1

如果查找二进制不是( ~ ),则规范需要对参数进行“ToInt32”转换,该转换对Int32进行明显转换,并指定将NaN值强制为零。

是的,这是令人难以置信的黑客,但非常方便...


从parseInt文档中,使用可选的radix参数来指定base-10:

parseInt('08', 10); //equals 8
parseInt('09', 10); //equals 9

这让我感到迂腐,迷惑和冗长(真的,每个parseInt中都有一个额外的参数?),所以我希望有一个更好的方法。

链接地址: http://www.djcxy.com/p/12531.html

上一篇: How do I work around JavaScript's parseInt octal behavior?

下一篇: What is the difference between ++i and i++?