parseInt(1 / 0, 19)

注:本文 JS 是基于 ES5 之后,之前的不做考虑。

先看一个小例子:
parseInt(1/0, 19);//结果为 18

这是为什么?

首先得了解一下 parseInt 这个方法,这里就不做详细解释了,网上一找一大把。
基本作用就是将一个 字符串 转换成一个 数字

工作原理是这样的,第一个参数是需要转换的值,第二个参数是转换的进制,比如:二进制,八进制,十进制,十六进制,十八进制等。

对于第一参数,需要有以下注意:
  • 接收的是一个字符串类型的值;
  • 可以传入任意类型的值,比如 function, object …..;
  • 如果不是一个字符串,会先进行隐式转换成一个字符串;

比如一个 Object:

parseInt(new String(44));//44
var a = {
    name: "45",
    toString: function() {
        return this.name;
    }
};
parseInt(a);//45

比如一个 Function:

function a() {
    return "123";
}
parseInt(a());
对于第二个参数,也需要注意以下几点:
  • 表示转换的进制,或是称作基数,默认是2|8|10|16|18 等等,但貌似 parseInt 函数内部并没有做这样的严格 check,从一方面表明 JS 功能的良好扩展性;

  • 对于这个进制或称为基数,需要注意,由于并没有做 check,所以用户可以输入任意的值;

  • 如果输入的是一个非数字,为直接忽略掉,而使用默认的 10 进制;

  • 如果输入的数字,貌似只有[ 2 - 36] 之间的数字才有效,并不支持 六十六十四 进制;

  • 如果输入的数字是1,则会返回 NaN

    进位制的记数系统

    基本进位制
    二进制三进制四进制五进制六进制
    七进制八进制九进制十进制十一进制
    十二进制十三进制十四进制十五进制十六进制
    十八进制二十进制二十四进制二十六进制二十七进制
    三十进制三十二进制三十六进制六十进制六十四进制
    平衡进位制
    平衡三进制平衡五进制平衡九进制
    特殊进位制
    Base64十进位制二进指数法黄金进制斐波那契编码e进制
    相关条目
    位元进位制米迪定理记数系统
第二个参数的代码示例:
console.log(parseInt(18363, "sd"));//18363
for (var i = 1; i < 65; i++) {
    console.log(i, parseInt(123456789, i));
}
//结果:
1 NaN
2 1
3 5
4 27
5 194
6 1865
7 22875
8 342391
9 6053444
10 123456789
11 259374245
12 511713753
13 957350637
14 1711566005
15 2942093829
16 4886718345
17 7874976173
18 12354557877
19 18923044005
20 28365650969
21 41699702445
22 60226582293
23 85591965317
24 119855162505
25 165568457709
26 225867353045
27 304572680613
28 406305578457
29 536616369005
30 702128418549
31 910698096645
32 1171591994633
33 1495682602797
34 1895663686005
35 2386286637989
36 2984619134745
37 NaN
38 NaN
39 NaN
40 NaN
41 NaN
42 NaN
43 NaN
44 NaN
45 NaN
46 NaN
47 NaN
48 NaN
49 NaN
50 NaN
51 NaN
52 NaN
53 NaN
54 NaN
55 NaN
56 NaN
57 NaN
58 NaN
59 NaN
60 NaN
61 NaN
62 NaN
63 NaN
64 NaN
关于 Base 数值对应表

以下以 21 | 20 | 19 | 10 为例:

StrBase 21Base 20Base 19Base 10 (decimal)
00000
11111
22222
33333
44444
55555
66666
77777
88888
99999
a101010NaN
b111111NaN
c121212NaN
d131313NaN
e141414NaN
f151515NaN
g161616NaN
h171717NaN
i181818NaN
j1919NaNNaN
k20NaNNaNNaN
lNaNNaNNaNNaN
mNaNNaNNaNNaN

所以本文的第一个例子中,parseInt( 1 / 0, 19),首先会将第一个参数 1 / 0 转换成字符串 “Infinity”,再将其以 Base 19 转换成数值。

如上Base 数值对应表可见,Base 为 19 可以接受的字符串为 [0-9a-i] (字母不区分大小写),所以将 i 转换成 18,而其后的 “nfinity” 全部会省略掉,所以最终的结果为 18

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值