parseInt('60', 10)
为什么与parseInt('60', 0)
相同?
JavaScript将0基数转换为什么?
答案 0 :(得分:3)
来自MDN(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt)
如果未定义基数,0或未指定,则JavaScript假定以下内容:
如果输入字符串以“ 0x”或“ 0X”(零后跟小写或大写X)开头,则假定基数为16,其余字符串则解析为十六进制数。
如果输入字符串以“ 0”(零)开头,则基数假定为8(八进制)或10(十进制)。选择哪个基数取决于实现。 ECMAScript 5阐明应使用10(十进制),但并非所有浏览器都支持。因此,在使用parseInt时始终指定一个基数。
如果输入字符串以任何其他值开头,则基数为10(十进制)。
因此,解析的输入是否从“ 0”开始,结果取决于浏览器。
答案 1 :(得分:1)
来自ECMAScript® 2018 Language Specification (ECMA-262, 9th edition, June 2018):
如果
radix
是undefined
或0
,则假定数字为10
,除非数字以代码对0x
或{{ 1}},在这种情况下,假设0X
中的radix
。如果16
是radix
,则数字也可以选择以代码对16
或0x
开头。
具体来说,步骤6、8和9表示:
6-假设
0X
是?R
。8-如果R≠
ToInt32(radix)
,...9-其他
0
=R
,令0
为R
。
因此,假设使用兼容的浏览器,当10
时,它将始终替换为radix == 0
。
答案 2 :(得分:1)
从docs
如果基数为undefined
,0
或unspecified
,则JavaScript假定以下条件:
- 如果输入字符串以“ 0x”或“ 0X”(零后跟小写或大写X)开头,则假定基数为16,其余字符串则解析为十六进制数。
- 如果输入字符串以“ 0”(零)开头,则基数假定为8(八进制)或10(十进制)。确切地选择哪个基数取决于实现。 ECMAScript 5阐明应使用10(十进制),但并非所有浏览器都支持。因此,在使用
parseInt
时,请始终指定基数。- 如果输入字符串以任何其他值开头,则基数为10(十进制)。
parseInt(string, radix);
string
:
radix
答案 3 :(得分:0)
根据文档,如果基数未定义或为0,则假定为10。
parseInt('60', 10) = (0 * 10 ^ 0) + (6 * 10 ^ 1) = 60
and
parseInt('60', 0) = (0 * 10 ^ 0) + (6 * 10 ^ 1) = 60