Answers:
人们一直在旅行,即使他们知道这一点。:-)出于相同的原因,您会看到以下内容parseInt("1abc"):返回1:parseInt停在第一个无效字符处,然后返回此时的所有内容。如果没有要解析的有效字符,则返回NaN。
parseInt(8, 3)表示“ "8"以3为底分析”(请注意,它将数字8转换为字符串;有关详细信息,请参见spec)。但在以3为底的数字中0,个位数分别是1,和2。就像要求它解析"9"为八进制。由于没有有效的字符,您得到了NaN。
parseInt(16, 3)要求它以"16"3为底进行解析。由于它可以解析1,所以可以,然后在处停止,6因为它无法解析。因此它返回1。
由于这个问题引起了广泛关注,并且在搜索结果中可能排名很高,因此下面列出了在JavaScript中将字符串转换为数字的选项以及它们的各种特质和应用程序(从我这里关于SO的另一个答案中得出):
parseInt(str[, radix])-将字符串的开头尽可能多地转换为整数(整数),而忽略结尾的多余字符。所以parseInt("10x")是10; 该x被忽略。支持可选的基数(基数)参数,(十六进制)parseInt("15", 16)也是如此。如果没有基数,则假定为十进制,除非字符串以(或)开头,在这种情况下,它会跳过这些并假定为十六进制。(某些浏览器过去将字符串以八进制开头;该行为从未指定,在ES5规范中特别禁止。)如果未找到可解析的数字,则返回。21150x0X0NaN
parseFloat(str)-和一样parseInt,但是浮点数并且仅支持十进制。再串上多余的字符被忽略,所以parseFloat("10.5x")是10.5(将x被忽略)。由于仅支持十进制,所以parseFloat("0x15")是0(因为解析在处结束x)。NaN如果找不到可解析的数字,则返回。
一元+,例如+str- (例如,隐式转换)使用浮点数和JavaScript的标准数字符号将整个字符串转换为数字(仅数字和小数点=十进制;0x前缀=十六进制;0o前缀=八进制[ES2015 +];某些实现对其进行了扩展将前导0视作八进制,而不是严格模式)。+"10x"是NaN因为x在不忽略。+"10"是10,+"10.5"是10.5,+"0x15"是21,+"0o10"是8[ES2015 +]。有一个陷阱:+""是0,NaN与您预期的不同。
Number(str)-就像隐式转换一样(例如,像+上面的一元转换一样),但是在某些实现上比较慢。(这并不重要。)
parseInt第toString一个参数的第一个用法是?那是有道理的。
parseInt算法:ecma-international.org/ecma-262/7.0/...
123e-2给出,1因为它先变成了1.23,然后解析停在小数点?
NumberFormatException每次的机会。
parseInt(将第一个参数强制为字符串)是有意义的。的目的parseInt是将字符串解析为整数。因此,如果您给它提供的不是字符串,则以它的字符串表示形式开头是很有意义的。它的作用之后是一个整体“诺特尔故事...
/***** Radix 3: Allowed numbers are [0,1,2] ********/
parseInt(4, 3); // NaN - We can't represent 4 using radix 3 [allowed - 0,1,2]
parseInt(3, 3); // NaN - We can't represent 3 using radix 3 [allowed - 0,1,2]
parseInt(2, 3); // 2 - yes we can !
parseInt(8, 3); // NaN - We can't represent 8 using radix 3 [allowed - 0,1,2]
parseInt(16, 3); // 1
//'16' => '1' (6 ignored because it not in [0,1,2])
/***** Radix 16: Allowed numbers/characters are [0-9,A-F] *****/
parseInt('FOX9', 16); // 15
//'FOX9' => 'F' => 15 (decimal value of 'F')
// all characters from 'O' to end will be ignored once it encounters the out of range'O'
// 'O' it is NOT in [0-9,A-F]
其他示例:
parseInt('45', 13); // 57
// both 4 and 5 are allowed in Radix is 13 [0-9,A-C]
parseInt('1011', 2); // 11 (decimal NOT binary)
parseInt(7,8); // 7
// '7' => 7 in radix 8 [0 - 7]
parseInt(786,8); // 7
// '78' => '7' => 7 (8 & next any numbers are ignored bcos 8 is NOT in [0-7])
parseInt(76,8); // 62
// Both 7 & 6 are allowed '76' base 8 decimal conversion is 62 base 10