您现在的位置:首页 >> 前端 >> 内容

parseInt(1/0,19)

时间:2017/9/18 9:06:00 点击:

  核心提示:注:本文 JS 是基于 ES5 之后,之前的不做考虑。先看一个小例子:parseInt(1/0, 19);//结果为 18这是为什么?首先得了解一下 parseInt 这个方法,这里就不做详细解释了,...

注:本文 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 为例:

Str Base 21 Base 20 Base 19 Base 10 (decimal)
0 0 0 0 0
1 1 1 1 1
2 2 2 2 2
3 3 3 3 3
4 4 4 4 4
5 5 5 5 5
6 6 6 6 6
7 7 7 7 7
8 8 8 8 8
9 9 9 9 9
a 10 10 10 NaN
b 11 11 11 NaN
c 12 12 12 NaN
d 13 13 13 NaN
e 14 14 14 NaN
f 15 15 15 NaN
g 16 16 16 NaN
h 17 17 17 NaN
i 18 18 18 NaN
j 19 19 NaN NaN
k 20 NaN NaN NaN
l NaN NaN NaN NaN
m NaN NaN NaN NaN

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

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

Tags:PA AR RS SE 
作者:网络 来源:hsl0530hsl