JavaScript parseInt() 进制转换详解

版权申诉
0 下载量 183 浏览量 更新于2024-08-19 收藏 17KB DOCX 举报
JavaScript中的`parseInt()`函数是一个非常常用的工具,用于将字符串转换为整数。它有两大核心参数:`string`和`radix`。 1. **`string`参数**:这个参数是你想要转换的数值,它必须是一个字符串。如果传递的是非字符串类型,如数字,JavaScript会先将其转换为字符串。`string`参数的处理方式非常关键,因为`parseInt()`会从字符串的开头开始查找可识别的数字序列,并忽略前面的空白字符。 2. **`radix`参数**:`radix`代表输入数值的基数(进制),即数字系统中使用的数码数量。它的有效范围是2到36,包括二进制、八进制、十进制、十六进制等。如果省略此参数或者设置为0,`parseInt()`默认假设基数是10。特别地,如果`radix`的值在1和36之间,但不包含在这个范围内,转换结果将返回`NaN`(Not-a-Number)。 3. **默认行为**:当`radix`参数被忽视时,`parseInt()`会根据`string`参数的开头来判断进制。如果`string`以`0x`开头,它会被识别为十六进制;如果以`0`开头(在非IE9以下版本的IE浏览器中),会被识别为八进制。如果`string`没有这些前缀,那么默认被识别为十进制。 4. **边缘情况**: - 如果`string`的开头不能与任何有效的数字序列匹配,`parseInt()`会返回`NaN`。 - 当`radix`指定为8(八进制)或16(十六进制)时,如果`string`中的数字超过了该进制的合法值(8进制超过7,16进制超过F),超出部分会被忽略,返回的结果仅基于能识别的部分。 - 在某些情况下,浏览器的实现可能有所不同。例如,IE9及以下版本对`0`开头的数字处理方式与其他现代浏览器不同,可能会识别为十进制而非八进制。 5. **实例分析**: - `parseInt(010)`:在大部分现代浏览器中,由于没有指定`radix`,`010`被视为八进制数,转换为十进制是8。但在老版本的IE中,它可能被解析为10。 - `parseInt('0x10')`:默认识别为十六进制,转换后是16(十进制)。 - `parseInt(010, 16)`:指定`radix`为16,`010`被视为十六进制的'8',转换后还是8(十进制)。 - `parseInt(010, 7)`:在七进制中,'8'是无效的,所以结果是`NaN`。 - `parseInt(0x10, 8)`:在八进制中,'16'无法识别,但'1'是有效的,所以转换结果为14(八进制对应十进制的值)。 - `parseInt(0x13, 8)`:同样,'19'在八进制中无效,只有'1'被识别,结果为1(十进制)。 理解`parseInt()`函数的工作原理及其对`string`和`radix`参数的处理,对于编写准确的JavaScript代码至关重要。在实际编程中,应始终明确指定`radix`以避免可能出现的解析差异,特别是在处理具有前导零或十六进制表示的数值时。