# JavaScript中的进制转换
# 字符串转换为数字
1.Number构造函数: 将字符串转换为10进制数字。
Number('123') // 123
Number('12.3') // 12.3
Number('12.00') // 12
Number('123e-1') // 12.3
Number('') // 0
Number(null) // 0
Number('0x11') // 17
Number('0b11') // 3
Number('0o11') // 9
Number('foo') // NaN
Number('100a') // NaN
Number('-Infinity') //-Infinity
2.parseInt(string, radix):将字符串按照指定基数转换为10进制数字。
- radix取值范围为[2, 36]。
- radix如果传特殊的值:
undefined、0、不传, radix就会被假定为以下三种情况。- 如果string以
0x或0X开头,就假定radix为16. - 如果string以
0开头,假定为radix8或者10。因此在使用parseInt时一定要指定radix - 如果string以任何其他开头,假定radix为10。
- 如果string以
- 不符合前面两条,则返回
NaN。
// 不规范但有效的写法:假定radix
parseInt('987') //987 radix假定为10
parseInt('0x111') // 273 radix假定为16
parsetInt('0b111') // 0 radix假定为10
// 以下均返回 15
parseInt("0xF", 16);
parseInt("F", 16);
parseInt("17", 8);
parseInt(021, 8);
parseInt("015", 10); // parseInt(015, 8); 返回 13
parseInt(15.99, 10);
parseInt("15,123", 10);
parseInt("FXX123", 16);
parseInt("1111", 2);
parseInt("15 * 3", 10);
parseInt("15e2", 10);
parseInt("15px", 10);
parseInt("12", 13);
// 以下均返回 NaN
parseInt("Hello", 8); // 根本就不是数值
parseInt("546", 2); // 除了“0、1”外,其它数字都不是有效二进制数字
// 以下均返回 -15
parseInt("-F", 16);
parseInt("-0F", 16);
parseInt("-0XF", 16);
parseInt(-15.1, 10);
parseInt(" -17", 8);
parseInt(" -15", 10);
parseInt("-1111", 2);
parseInt("-15e1", 10);
parseInt("-12", 13);
# 数字转换为字符串
Number.prototype.toString(radix): 指定要用于数字到字符串的转换的基数(从2到36)。默认为10。不在[2,36]会报错。
(17).toString(); // '17'
(17.2).toString(); // '17.2'
(6).toString(2); // '110'
(254).toString(16); // 'fe'
(-0xff).toString(2); // '-11111111'
# ES6标准进制写法
二进制:
0b或0B前缀。0b111 === 7 // true 0B111 === 7 // true八进制:
0o或0O前缀。0o11 === 9 // true 0O11 === 9 // true十六进制:
0x或0X前缀。0x11 === 17 // true 0X11 === 17 // true
# 进制转换
其他进制转为10进制
Number()和parseInt()任选其一。
两者的区别:
parseInt(string,radix)在string以0开头的特殊情况。
推荐: 带进制前缀时用Number构造函数。不带进制前缀时用parseInt(string, radix);
Number(0b11)/Number('0b11') // 3
parseInt('0b11', 2) // 0 parseInt函数string以0开头的特殊情况
10进制转为其他进制
Number.prototype.toString(readix)
← 详解深拷贝