有什么办法可以将以前导零开头的十进制数转换为javascript中的字符串?似乎javascript只是没有以十进制数开头的零的概念。

我想要的例子

function turnBaseTenNumberToString(num) {
  ...
}

console.log(turnBaseTenNumberToString(010));
// outputs
// '010'


我应该注意以下内容不起作用
Number.prototype.toString()

console.log((010).toString(10))
// outputs
// '8'


我认为这是调用toString之前对数字求值的结果。

最佳答案

问题在于十进制整数文字不能包含前导零:

DecimalIntegerLiteral ::
    0
    NonZeroDigit DecimalDigits(opt)


但是,ECMAScript 3允许(作为可选扩展)解析以8为底的前导零的文字:

OctalIntegerLiteral ::
    0 OctalDigit
    OctalIntegerLiteral OctalDigit


但是ECMAScript 5禁止在严格模式下这样做:


  处理strict mode code (see 10.1.1)时,符合标准的实现不得将NumericLiteral的语法扩展为包括B.1.1中所述的OctalIntegerLiteral。


ECMAScript 6引入BinaryIntegerLiteral和OctalIntegerLiteral,所以现在我们有了更多连贯的文字:


BinaryIntegerLiteral,以0b0B为前缀。
OctalIntegerLiteral,以0o0O为前缀。
HexIntegerLiteral,以0x0X为前缀。


旧的OctalIntegerLiteral扩展名已重命名为LegacyOctalIntegerLiteral,但仍可以在非严格模式下使用。

因此,010是一种语法错误,某些浏览器仅在非严格模式下可以容忍该错误。但是您不能依靠它,即使那样它也会产生数字8

09-16 10:47