为什么在调用 parseInt 时需要使用基数参数?

基数到底是什么意思? 我们为什么需要它?

parseInt(10, radixValue);
76498 次浏览

因为如果您有一个字符串数字,如 0700,并希望输出为整数 700,您需要通知 parseInt(),它是一个十进制数字,而不是八进制。

console.log(parseInt("0700"));
// 448


// I really wanted decimal (base 10)
console.log(parseInt("0700", 10));
// 700


// What is this? Binary, Decimal, Octal?
console.log(parseInt("0110"));
// 72


// as binary
console.log(parseInt("0110", 2));
// 6
注意: 我只回答了你问题的一半,请参阅其他关于基数实际上是什么的定义。

The radix is the base number of the number system: http://en.wikipedia.org/wiki/Radix

Normally, you only need to specify the radix if you want it to be different from 10. More specifically (from http://www.w3schools.com/jsref/jsref_parseInt.asp) :

如果基数参数被省略, JavaScript 假设:

如果字符串以“0x”开头,则 基数为16(十六进制) 字符串以“0”开头,基数是8 (octal). This feature is deprecated If 字符串以任何其他字符串开头 值,基数为10(小数)

您可能并不总是希望将整数解析为以10为基数的数字,因此提供基数允许您指定其他数字系统。

基数是一个数字的值的个数。十六进制应该是16。八进制是8,二进制是2,以此类推..。

parseInt()函数中,您可以做几件事来提示基数,而不需要提供基数。如果用户输入的字符串与其中一条规则匹配,但是没有明确表示要这样做,那么这些规则也可能对您不利。例如:

// Numbers with a leading 0 used a radix of 8 (octal) before ECMAScript 5.
// These days, browsers will treat '0101' as decimal.
var result = parseInt('0101');


// Numbers that start with 0x use a radix of 16 (hexidecimal)
var result = parseInt('0x0101');


// Numbers starting with anything else assumes a radix of 10
var result = parseInt('101');


// Or you can specify the radix, in this case 2 (binary)
var result = parseInt('0101', 2);

基数参数用于指定 which numeral system to be used, for example, a radix of 16 (hexadecimal) indicates that the number in the string should be parsed from a 从十六进制数到十进制数 号码。

如果基数参数被省略, JavaScript 假设:

如果字符串以“0x”开头,则 基数是16(十六进制)

If the string begins with "0", the 基数是8(八进制)。这个特性是 deprecated

If the string begins with any other 值,基数为10(小数)

来源 W3学校

根是记数系统的基础。有无数的数字系统,但是大多数人熟悉的是以10为基数的(十进制)和以2为基数的(二进制)。

数值可以在不同的基础上进行不同的解释。例如,二进制中的数字10可以用十进制中的数字2表示。

In the case of parseInt(), the radix allows you to specify the base to be used. By default, a radix of 10 is used.

但是,即使使用以10为基数,也应该始终指定基数

parseInt("010")//报税表8

乍一看,您可能期望语句返回10。明确使用基数将有助于避免混淆:

parseInt("010", 10)//报税表: 10

只是添加了一些额外的信息,清楚地回答了这个问题:

If radix is undefined or 0 (or absent), JavaScript assumes the following:

  • [...]
  • 如果输入字符串以“0”开头,则基数为8(八进制)或10(十进制)。具体选择哪个基数取决于实现。ECMAScript 5指定使用10(十进制) ,但并非所有浏览器都支持这一点。出于这个原因,在使用 parseInt 时总是指定一个基数。
  • [...]

资料来源: MDN parseInt ()

这只是我的观点,但是“我们需要使用基数”的想法很快就过时了。这个问题在一段时间以前确实存在,因为 IT 世界之外的人们通常不使用除了十进制以外的数字符号,并且经常提供像“010”这样的零填充的十进制数字。但是由于 ECMAScript 6中的八进制数字在 JS 中是以“0o”为前缀的,而不是像 ECMAScript 5和3中那样仅以“0”为前缀的。因此,如果你不针对 IE 家族(这不是罕见的情况下现在) ,你可以跳过基数安全。

PaeInt ()中的 是什么?

The parseInt() function parses a string and returns an integer. It takes a second argument for the , which 指定字符串中数字的基数. The can be an integer between 2 and 36.

函数调用类似于(语法) :

parseInt(string, radix);

一些例子来阐明 的概念

例子一:

var a = parseInt("11", 2);

变量表示“11”在 二进制系统,或以2为基数中。因此,此示例将字符串“11”转换为整数3。

例二:

var a = parseInt("10011", 16);

这里,告诉 parseInt()10011十六进制数,因此在整数中,它被转换为 65553

简而言之,长话短说,参数告诉 parseInt(),作为第一个参数传递的字符串属于一个特定的系统(二进制、十六进制等) ,它需要转换为一个整数作为最终产品。

在2011年使用 parseInt 时,我经历了一个艰难的过程,那就是总是需要提供基数。但在现代浏览器中,它们似乎“修复”了这个问题。

如果对以0开头的字符串运行函数,它将以基数10解析该字符串。但是,如果出于某种原因在一个数上运行它,那么它仍将使用基数8,如 MDN中所提到的。

console.log(parseInt('015'));
// This returns 15


console.log(parseInt(015));
// This returns 13