我如何解决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?