在JavaScript中,当我们使用parseInt(参数)时,js将返回一个由字符串参数解析的num。
它解析字符串,直到第一个char不能成为数字。
,例如
console.log(parseInt("024x2")) // 24
console.log(parseInt("0b")) // 0
但
console.log(parseInt("0x")) // NaN
为什么不呢?
console.log(parseInt("0x")) // 0
我知道0x表示十六进制
答案 0 :(得分:1)
使用parseInt("0x", 10)
强制十进制系统,否则:
如果radix未定义或0(或不存在),则JavaScript假定以下内容:
如果输入字符串以" 0x"开头?或" 0X",基数为16(十六进制)>并解析字符串的其余部分。
答案 1 :(得分:1)
这在Mozilla reference documentation(强调我的)中有所解释:
如果
parseInt
遇到的字符不是指定基数中的数字,它会忽略它和所有后续字符,并返回解析到该点的整数值。parseInt
将数字截断为整数值。允许前导和尾随空格。...
如果
radix
未定义或0(或不存在),则JavaScript假定以下内容:
- 如果输入字符串以" 0x&#34开头;或" 0X",
radix
为16(十六进制),并解析字符串的其余部分。- 如果输入字符串以" 0"开头,则
radix
为8(八进制)或10(十进制)。究竟选择哪个基数是依赖于实现的。 ECMAScript 5指定使用10(十进制),但并非所有浏览器都支持此功能。因此,在使用parseInt
时,请始终指定基数。- 如果输入字符串以任何其他值开头,则基数为10(十进制)。
如果第一个字符无法转换为数字,
parseInt
会返回NaN
。
注意第一个项目符号点与其他项目符号的不同之处 - 它表示"字符串的其余部分被解析"。我认为这意味着:
parseInt("0xfoo")
被视为等同于
parseInt("foo", 16)
无论什么" foo"是 - 在你的情况下。因此parseInt("0x")
相当于parseInt("", 16)
。
所以,这是你的例子和输出的解释:
// radix is inferred as 8 or 10 (implementation-dependent)
// Parsing stops at "x" which is invalid in either radix.
// The first character was valid, so the result is 24 or 18.
parseInt("024x2")
// radix is inferred as 8 or 10 (implementation-dependent)
// Parsing stops at "b" which is invalid in either radix.
// The first character was valid, so the result is 0.
parseInt("0b")
// radix is inferred as 16, but then parsing *restarts* at
// an empty string. There's no valid first character at this
// point, so the result is NaN
parseInt("0x")
ECMA standard provides much more detail但Mozilla描述可能更容易理解。 ECMA版本符合我对&#34的理解;字符串的其余部分被解析"也 - 参见说明的第10步。
答案 2 :(得分:0)
0x
是十六进制数的开头。你得到NaN
,因为你有前缀,但没有任何指定数字值的数字。
答案 3 :(得分:0)