我在将前导零号码转换为字符串
时遇到问题输入:
function numToString(num) {
num = num + "";
return num;
}
numToString(015); // outputs "13"
输出:
numToString(015); // outputs "13"
期望的输出:
numToString(015); // outputs "15"
答案 0 :(得分:2)
以数字13的八进制表示的数字015。
您不能将前缀设为0并将其视为基数10.如果您希望将其打印为15,则只需传递
numToString(15);或numToString(017);
修改
如果你真的想打印八进制字符串修改你的代码,如下所示
function numToString(num) {
num = num.toString(8) + "";
return num;
}
numToString(015); // outputs "15"
答案 1 :(得分:0)
问题不在于说明。除非您使用eval
来评估在运行时放在一起的某些代码,numToString(015);
是您作为程序员输入的内容,而015
是一个数字源代码文字,当转换为aa时脚本已编译。
整数的十进制数字文字必须以非零数字开头。在严格模式下,使用0
启动整数将引发错误:
function f() {
"use strict"
return 015
}
f()
数字文字(整数)的八进制语法以'0'开头,后跟八进制数字现在被归类为ES6 ECMAScript附录B.1.1中定义的 LegacyOctalIntegerLiteral 标准。传统的八进制文字在严格模式下不可用。
请注意,用于将字符串转换为数字的语法(例如,将一元+应用于字符串)与放置在源代码中的数字文字不同。字符串数字十进制整数可以以'0'开头:
console.log( +"015")
所以你问题的烦人答案是在源代码中写入十进制整数时不要输入前导'0'。一个更复杂的答案是,在解析字符串值以获取数字时,解析应该考虑被认为是有效输入的内容。
如果要测试字符串是否可以完整转换为(十进制)数字,请尝试
var num = + stringValue;
if( isNaN(num) {
// stringValue edoes not convert to a number
// If it starts with a number it has left over characters.
}