为什么parseInt(x,0)与parseInt(x,10)相同?

时间:2019-06-05 10:48:43

标签: javascript

parseInt('60', 10)为什么与parseInt('60', 0)相同?

JavaScript将0基数转换为什么?

4 个答案:

答案 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)

  

如果radixundefined0,则假定数字为10,除非数字以代码对0x或{{ 1}},在这种情况下,假设0X中的radix。如果16radix,则数字也可以选择以代码对160x开头。

具体来说,步骤6、8和9表示:

  

6-假设0X是? R

     

8-如果R≠ToInt32(radix),...

     

9-其他0 = R,令0R

因此,假设使用兼容的浏览器,当10时,它将始终替换为radix == 0

答案 2 :(得分:1)

docs

如果基数为undefined0unspecified,则JavaScript假定以下条件:

  
      
  • 如果输入字符串以“ 0x”或“ 0X”(零后跟小写或大写X)开头,则假定基数为16,其余字符串则解析为十六进制数。
  •   
  • 如果输入字符串以“ 0”(零)开头,则基数假定为8(八进制)或10(十进制)。确切地选择哪个基数取决于实现。 ECMAScript 5阐明应使用10(十进制),但并非所有浏览器都支持。因此,在使用parseInt时,请始终指定基数。
  •   
  • 如果输入字符串以任何其他值开头,则基数为10(十进制)。
  •   

parseInt(string, radix);

string

  • 要解析的值。如果此参数不是字符串,则使用ToString抽象操作将其转换为一个参数。此参数中的前导空格将被忽略。

radix

  • 2到36之间的整数,表示字符串的基数(数学数字系统中的基数)。请注意-该默认值不是10

答案 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