为什么Javascript中parseInt的radix参数传0会返回十进制结果?
parseInt("1", 0)返回1的原因解释
你观察到的现象是符合ECMAScript官方规范的,核心原因是parseInt对radix(基数)参数的处理有特殊兼容逻辑,并非浏览器实现错误。
parseInt处理radix参数的完整规则如下:
- 当传入的radix值为
undefined、0或者主动省略该参数时,不会直接触发「radix小于2返回NaN」的逻辑,会先进入自动基数推断流程:- 若待解析的字符串以
0x/0X开头,默认按16进制解析 - 若待解析的字符串以
0开头,ES5之后统一按10进制解析(ES3时代曾按8进制解析,属于历史遗留规则) - 其余所有情况默认按10进制解析
- 若待解析的字符串以
- 只有当radix是明确的
1,或者≥37的数值时,才会直接返回NaN
对应你给出的代码parseInt("1", 0):
radix为0触发自动推断逻辑,待解析字符串"1"不属于特殊开头场景,因此按10进制解析得到结果1,和parseInt("1")、parseInt("1", 10)的运行结果完全一致。
你看到的文档描述里「radix小于2或大于36时返回NaN」的规则,是排除了radix为0的特殊场景的,两者并不冲突。
内容的提问来源于stack exchange,提问作者Isuru Dharmadasa
相关产品推荐
相关产品推荐

