[英]How to turn a base ten Number with leading zeros into a string
有什么办法可以将以前导零开头的十进制数转换为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禁止以严格模式执行此操作:
一致性实现,在处理时严格模式代码(见10.1.1) ,必须不延伸NumericLiteral的语法,以包括OctalIntegerLiteral如描述B.1.1 。
ECMAScript 6引入了BinaryIntegerLiteral和OctalIntegerLiteral ,所以现在我们有了更多连贯的文字:
0b
或0B
为前缀。 0o
或0O
为前缀。 0x
或0X
。 旧的OctalIntegerLiteral扩展名已重命名为LegacyOctalIntegerLiteral ,但仍可以在非严格模式下使用。
因此, 010
是语法错误,某些浏览器仅在非严格模式下可以容忍该错误。 但是您不能依靠它,即使那样它也会产生数字8
。
根据OP
将以零开头的十进制数转换为字符串
好吧,JavaScript将前导零视为该值以8为底的指示符。因此,将数字定义为010
,十进制系统中的数字值为8 (1 * 8^1 + 0 * 8^0)
。
如果要避免这种情况,则应以字符串表示形式传递一个数字,并在需要时删除前导零。
function turnBaseTenStringToNumber(num) { return parseInt(num.replace(/^0+/, '')); } console.log(turnBaseTenStringToNumber(`010`)); // outputs 10
有关更多详细信息,请参见带有基数文档的编号。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.