有没有办法将带前导零的基数十转换成javascript中的字符串?似乎javascript没有带前导零的基数10的概念。
我想要的例子
function turnBaseTenNumberToString(num) {
...
}
console.log(turnBaseTenNumberToString(010));
// outputs
// '010'我要指出的是,以下内容不起作用
Number.prototype.toString()
console.log((010).toString(10))
// outputs
// '8'我假设这是调用toString之前的数字评估的结果。
发布于 2015-10-22 23:10:53
问题是十进制整数文本不能有前导零:
DecimalIntegerLiteral ::
0
NonZeroDigit DecimalDigits(opt)然而,ECMAScript 3允许(作为可选扩展)解析基8中带有前导零的文字:
OctalIntegerLiteral ::
0 OctalDigit
OctalIntegerLiteral OctalDigit但ECMAScript 5禁止在严格模式下这样做:
在处理严格模式代码(见10.1.1)时,一致性实现不能扩展NumericLiteral的语法以包括B.1.1中描述的OctalIntegerLiteral。
ECMAScript 6引入了BinaryIntegerLiteral和OctalIntegerLiteral,所以现在我们有了更连贯的文字:
0b或0B作为前缀。0o或0O作为前缀。0x或0X作为前缀。旧的OctalIntegerLiteral扩展已经被重命名为LegacyOctalIntegerLiteral,这仍然允许在非严格模式下。
因此,010是一个语法错误,某些浏览器只能在非严格模式下才能容忍这种错误。但是你不能依赖它,即使这样,它也会产生数字8。
发布于 2015-10-22 23:12:13
按照执行部分
将带前导零的基数10转换为字符串
好的,JavaScript把一个前导零作为一个指示值在基数8中的指标。因此,当将数字定义为010时,十进制中的数字值是8 (1 * 8^1 + 0 * 8^0)。
如果您想避免这种情况,您应该在字符串表示中传递一个数字,并在需要时删除一个前导零。
function turnBaseTenStringToNumber(num) {
return parseInt(num.replace(/^0+/, ''));
}
console.log(turnBaseTenStringToNumber(`010`));
// outputs 10
有关更多详细信息,请参见带有基数的数字文档。
https://stackoverflow.com/questions/33292081
复制相似问题