最常用方法是parseInt("1010", 2)→10;Number("0b1010")→10需带前缀;手动实现用dec=dec*2+bit逐位计算。

直接用 parseInt(),传入二进制字符串和基数 2 即可。
使用 parseInt() 转换(最常用)
parseInt() 是标准且简洁的方式,适用于以 "0b" 开头或纯数字组成的二进制字符串:
-
parseInt("1010", 2)→ 返回 10 -
parseInt("0b1111", 2)→ 返回 15(前缀会被自动忽略) -
parseInt("1001101", 2)→ 返回 77
注意:字符串中只能包含 0、1 和可选的 "0b" 前缀,否则会截断到第一个非法字符为止(例如 parseInt("101a0", 2) 得到 5)。
用 Number() 配合 0b 前缀(ES6+)
如果字符串已带 "0b" 前缀,可直接用 Number():
立即学习“Java免费学习笔记(深入)”;
-
Number("0b1010")→ 10 -
Number("0b11111111")→ 255
不带前缀时 Number("1010") 会被当作十进制,结果是 1010,所以必须确保有 "0b" 前缀才安全。
手动实现(理解原理用)
从高位到低位遍历,逐位累加:result = result * 2 + currentBit:
function binToDec(binStr) {
let dec = 0;
for (let i = 0; i < binStr.length; i++) {
if (binStr[i] === '0' || binStr[i] === '1') {
dec = dec * 2 + Number(binStr[i]);
}
}
return dec;
}例如 binToDec("1101") 计算过程:
0→1→3→6→13,结果为 13。
处理异常与校验
生产环境建议先校验输入是否合法:
- 用正则
/^[01]+$/检查纯二进制字符串 - 或用
/^0b[01]+$/i检查带前缀格式 - 校验失败时返回
NaN或抛错,避免静默错误
例如:!/^[01]+$/.test("102") ? NaN : parseInt("102", 2) 可防止误转。


















