JS
中提供的进制表示方法有四种:二进制、八进制、十进制、十六进制。
对于数值字面量,主要使用不同的前缀来区分:
0
和 1
;前缀 0b
或 0B
0-7
;前缀 0o
或 0O
(ES6规定)0-9
;不用前缀0-9
和 a-f
;前缀 0x
或 0X
在 JS 内部的默认情况下,二进制、八进制、十六进制字面量数值都会自动转为十进制进行运算。
0x22 // 十六进制自动转为十进制 34
0b111 // 二进制自动转为十进制 7
0o33 // 27 八进制自动转为十进制 27
0x22 + 0b111 // 41 先分别自动转为十进制,后进行 + 运算
0o33 + 12 // 39 先自动转为十进制,后进行 + 运算
(0x33).toString() // '51' 先自动转为十进制,后进行 toString() 运算
(0x33).valueOf() // 51 先自动转为十进制,后进行 valueOf() 运算
除了十进制是 JS 默认的数字进制以外,其他三种进制方式平时使用较少,主要在处理 Blob 数据、字节编码或者位运算、转义字符等等时候才会碰到。
注意
在 JS 中,进制转换通常是将数字转换为字符串形式,因为直接转换为数字可能导致精度损失。例如,
parseInt(0.1, 2)
和parseInt(0.1, 16)
的结果都会是0
,因为在二进制和十六进制中,0.1 不能精确表示。
NaN
parseInt('11kk', 16) // 17
parseInt('11kk11', 16) // 17
parseInt('kk11', 16) // NaN
parseInt('kk', 16) // NaN
parseInt('1111', 2) // 15 按二进制来理解 '1111'
parseInt('1234', 8) // 668 按八进制来理解 '1234'
parseInt('18af', 16) // 6319 按十六进制来理解 '18af'
parseInt('1111') // 1111 默认按十进制来理解 '1111'
// 第二个参数无法转成数字,则忽略该参数,默认按十进制理解
parseInt('1111', 'a') // 1111
2-36
的整数,超出该范围,返回 NaN;若非整数,向下取整
// 第二个参数不是 2-36 的整数
parseInt('1111', 88) // NaN
parseInt('1111', 1) // NaN
// 第二个参数非整数,转成向下取整的整数理解
parseInt('1111', 2.2) // 15
parseInt
会默认使用十进制来解析字符串。若字符串以 0x(或 0X)
开头,会被认为是十六进制数;而其他进制的字符串,0o21(八进制)
,0b11(二进制)
不会以该进制基数自动转换,而是得到 0。
parseInt('0x11') // 17 ox 开头,按十六进制理解
parseInt('0b11') // 0
parseInt('0o11') // 0
parseInt('1111') // 1111 默认按十进制来理解 '1111'
parseInt('0x11', 2) // 0
parseInt('0x11', 8) // 0
parseInt('0x11', 10) // 0
parseInt('0x11', 16) // 17
注意
在使用
parseInt
进行进制转换时,为保证运行结果的正确性和稳定性,第二个参数不能省略
可以把字符串转为数字,支持其他进制的字符串,默认转成十进制数字。
0b(或0B)
,0o(或0O)
,0x(或0X)
Number('0b11') // 3
Number('0o11') // 9
Number('0x11') // 17
NaN
Number('0b12') // NaN
Number('0o19') // NaN
Number('0x1h') // NaN
与 Number()
一样,可以把字符串转为数字,支持其他进制的字符串,默认转成十进制数字。
NaN
+ '0b11' // 3
+ '0o11' // 9
+ '0x11' // 17
+ '0b12' // NaN
+ '0o19' // NaN
+ '0x1g' // NaN
toString()
: 将数字转换为指定进制的字符串形式。Number.toString()
: 将数字转换为指定进制的字符串形式,并返回。(11).toString(2) // '1011'
(11).toString(8) // '13'
(11).toString(16) // 'b'
// 另一种写法
Number(11).toString(8) // '13'
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- bangwoyixia.com 版权所有 湘ICP备2023022004号-2
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务