JavaScript - 防止八进制转换

JavaScript - Preventing octal conversion

我将数字输入作为参数,只是想考虑前导零。但似乎 javascript 在我可以对数字进行任何操作之前将数字转换为八进制。到目前为止,解决它的唯一方法是,如果我最初将数字作为字符串传递,但我希望在它传递后有另一种方法来转换它?到目前为止尝试过(使用 017 提醒我八进制行为):

017.toString(10) // 15
parseInt(017,10) // 15
017 + "" //15
new Number(017) //15

new Number('017') //17
parseInt('017', 10) // 17

如此给出

function(numb) {

if (typeof numb === number) {
// remove leading zeroes and convert to decimal
}
else {
 // use parseInt
}

}

'use strict' 似乎也没有像一些较旧的帖子所建议的那样解决这个问题。有什么想法吗?

  1. 如果你取"numerical input",你应该总是绝对保证有一个字符串。在这个上下文中没有我知道returns一个Number的输入法。由于您收到一个字符串,因此 parseInt(.., 10) 总是足够的。 017 仅当在源代码中按字面意义编写时(或缺少 parseInt 的基数参数时)才被解释为八进制。
  2. 如果出于某种奇怪的原因,你最终将十进制解释为八进制,并且你想将该值反向转换回十进制,这很简单:用八进制表示该值,然后重新- 将其解释为十进制:

    var oct = 017; // 15
    parseInt(oct.toString(8), 10) // 17
    

    虽然因为您可能不知道输入最初是否被解释为八进制,所以这不是您应该做的事情。

JavaScript 将所有以 0 开头并包含所有八进制数字的数字解释为八进制 - 例如 017 将是八进制,但 019 则不是。如果您希望您的数字为小数,则
1.省略前导0。
2. 继续使用 parseInt()。

原因是 JavaScript 使用了一些隐式转换,它根据数字选择最可能的情况。在 JavaScript 中决定前导 0 表示数字是八进制。如果您需要前导 0,那么您必须接受该规则并使用 parseInt()。

Source

如果您在脚本中手动输入数字,则不要使用前导零(如果数字是有效的八进制,则隐含地将其视为八进制 - 如果不是,则将其视为十进制)。如果您将数字作为字符串,则只需使用 + 运算符转换为(十进制)数字。

console.log(+"017")

if (021 < 019) console.log('Paradox');

严格模式不允许使用零前缀

'use strict'

if (021 < 019) console.log('Paradox');