0

我的最后一个问题中,我发现以 0 开头的数字被解析为八进制数。在这个问题中,答案是:

这是一个常见的 Javascript 问题,有一个简单的解决方案:

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

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

这有效,但前提是数字用引号引起来。考虑以下示例:

var test = 0132;
alert(parseInt(test, 10));

JSFiddle:http: //jsfiddle.net/VU96M/2/

其输出是“90”,而不是“132”。

因此,如您所见,该解决方案在这种情况下不起作用。

如果我有一个变量作为参数传递给函数,或者从函数返回,它有一个前导零,如上面的变量test,我如何将它解析为一个以 10 为底的值?

4

3 回答 3

2

0132 在传递给之前被视为八进制parseInt,所以你真的在打电话parseInt(90,10)

试试这个:

var test = 0132;
parseInt((test).toString(8)); // 132
于 2013-04-01T18:32:59.790 回答
2

严格模式下,JavaScript 不允许你做这样的事情——定义一个八进制字面量——你会得到一个异常。开始使用严格模式作为 JavaScript 代码的默认模式确实是一个很好的做法。

另外,因为在非严格模式下,您不知道test变量是定义为八进制文字还是十进制,所以如果定义为or test.toString(8),当然会给您不同的结果。test0132132

于 2013-04-01T20:19:27.373 回答
1

您可以将其更改回以 8 为基的文字,以便返回以 10 为基的版本:

console.log( +test.toString(8) ); // 132
//                 ^^^^^^^^^^^

演示

于 2013-04-01T18:31:49.380 回答