# 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以0x0X开头,就假定radix为16.
    • 如果string以0开头,假定为radix8或者10因此在使用parseInt时一定要指定radix
    • 如果string以任何其他开头,假定radix为10。
  • 不符合前面两条,则返回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标准进制写法

  • 二进制: 0b0B前缀。

    0b111 === 7 // true
    0B111 === 7 // true
    
  • 八进制:0o0O前缀。

    0o11 === 9 // true
    0O11 === 9 // true
    
  • 十六进制:0x0X前缀。

    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)

作者:王龙楷; 标签:原创; 提交时间: 8/7/2021, 7:50:12 PM