有什么办法可以将以前导零开头的十进制数转换为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,以
0b
或0B
为前缀。OctalIntegerLiteral,以
0o
或0O
为前缀。HexIntegerLiteral,以
0x
或0X
为前缀。旧的OctalIntegerLiteral扩展名已重命名为LegacyOctalIntegerLiteral,但仍可以在非严格模式下使用。
因此,
010
是一种语法错误,某些浏览器仅在非严格模式下可以容忍该错误。但是您不能依靠它,即使那样它也会产生数字8
。