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

IT技术 javascript
2021-01-12 08:38:15

基数实际上是什么意思?为什么我们需要它?

parseInt(10, radixValue); 
6个回答

您可能并不总是希望将整数解析为基数为 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);
所以 parseInt('0101') 给出 101 或 65 ?
2021-03-16 08:38:15
最新的文档是 ES 5 确实指定没有任何基数应该被视为与传入 10 相同,但警告您无论如何都要传递它以获得旧浏览器支持。
2021-03-19 08:38:15
我总是parseInt(x, 0)因为某种我现在不记得的原因使用过..这是否等于parseInt(x, 10)我现在想知道......
2021-03-22 08:38:15
@Vivekh - 当我最初发布答案时,它曾经在 2011 年支持它。在谷歌浏览器中快速检查似乎表明它们已经发生了一些变化。parseInt('0101')现在返回101不同的浏览器可能有不同的行为。始终包括基数以获得可靠的结果。
2021-03-26 08:38:15
@Vivekh - 您可以在developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/查看最新文档...
2021-03-27 08:38:15

因为如果你有一个类似的字符串数字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
注意我只回答了你的问题的一半。请参阅其他人以了解基数实际上是什么的良好定义。

@Naren 8 年前,在我运行它的任何浏览器控制台中都是 448。在现代 Chrome 和 Node 中,我今天也得到了 700,但当时可能是未定义的行为。
2021-03-16 08:38:15
@MichaelBerkowski 我最近注意到了这种差异-显然ES6 八进制数以0o而不是0
2021-03-27 08:38:15
@Naren,@MichaelBerkowski:只是在开发工具中做了一个愚蠢的快速检查,发现行为是不同的,具体取决于我是使用单引号'还是双"引号数字输入。
2021-03-30 08:38:15
另外,二进制 parseInt('10101', 2)
2021-04-01 08:38:15
console.log(parseInt("0700")); 正在返回 //700 而不是 448。
2021-04-04 08:38:15

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

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

在 的情况下parseInt(),基数允许您指定要使用的基数。默认情况下,使用基数 10。

但是,即使使用基数 10,也应始终指定基数。请考虑以下情况

parseInt("010") // 返回 8

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

parseInt("010", 10) // 返回:10

好吧,也许它会改变,但在节点和 Chrome 控制台中,它返回 8 而不带基数 10
2021-03-14 08:38:15

基数是数字系统的基数:http : //en.wikipedia.org/wiki/Radix

通常,如果您希望它与 10 不同,则只需要指定基数。更具体地说(来自http://www.w3schools.com/jsref/jsref_parseInt.asp):

如果省略 radix 参数,JavaScript 假定如下:

如果字符串以“0x”开头,则基数为 16(十六进制) 如果字符串以“0”开头,则基数为 8(八进制)。此功能已弃用 如果字符串以任何其他值开头,则基数为 10(十进制)

只需添加一些附加信息即可清楚地回答问题:

如果 radix 未定义或为 0(或不存在),JavaScript 会假设如下:

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

来源:MDN parseInt()