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规范中特别禁止。)如果未找到可解析的数字,则返回。21
15
0x
0X
0
NaN
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