ES6学习二
数值的扩展
1. 二进制、八进制和十六进制表示法
1.1 不同进制的表示
在js中,10进制
是不需要任何特殊表示方法的,但是2进制
与8进制
和16进制
则需要特殊表示。
在以前前,JS表示16进制
的数字,需要以0x
(或0X
)开头
0x00 === 0 // true
0x0A === 10 // true
0x0F === 15 // true
0x10 === 16 // true
表示8进制
的数字,需要以0
开头
000 === 0 // true
007 === 7 // true
010 === 8 // true
表示2进制
的数字,需要以0b
(或0B
)开头
0b00 === 0 // true
0b01 === 1 // true
0b10 === 2 // true
但是8进制
这种以0
开头的表示方法容易引起歧义,有的浏览器会当作10进制
来解析,所以从 ES5 开始,在严格模式之中,八进制就不再允许使用前缀0表示,ES6进一步明确,要使用前缀0o
(或0O
)表示
0o00 === 0 // true
0o07 === 7 // true
0o10 === 8 // true
1.2 不同进制转换
- 使用
Number
方法可以将不同进制的数值转为十进制的数值
Number(0x10) // 16
Number(0O10) // 8
Number(0b10) // 2
- 使用
toString()
方法转化成任意进制的字符串(得到的结果不带前缀)
0b11111.toString(2) === '1111'
0b11111.toString(8) === '37'
// 默认转为10进制
0b11111.toString() === '31'
0b11111.toString(16) === '1f'
// 非常规进制也可以转换
0b11111.toString(6)