JavaScript中能否使用二进制或八进制?如何像十六进制那样使用?
JavaScript里的二进制与八进制使用技巧
当然可以啦!在JavaScript里,你完全能像用十六进制\x61那样,用八进制来处理字符串;二进制的话虽然没有直接的转义序列,但也有简单的实现方式,刚好匹配你的需求,下面详细说:
1. 八进制转义字符:直接用,和十六进制逻辑一致
和你给出的十六进制例子类似,JavaScript支持八进制转义序列,写法是在反斜杠\后面跟1-3位0-7的数字。比如字符'a'的ASCII码是97,转成八进制是141,所以代码可以这么写:
var ab = ["\141"]; document.write(ab[0]); // 运行后会输出:a
这里提两个小注意点:
- 严格模式下,数字字面量的传统八进制写法(比如
var num = 0141)会报错,但字符串里的\141这种转义是完全没问题的,所有JS版本都支持。 - 八进制转义最多支持3位数字,超过的话只会解析前3位;不足3位则按实际位数处理。
2. 二进制的实现方式:两种简单方法
JavaScript没有像八进制、十六进制那样的直接二进制转义字符(比如\bxx这种格式),但有两种很方便的方式实现类似效果:
方法一:用String.fromCharCode()+二进制字面量
ES6之后支持二进制数字字面量(以0b开头),你可以先写出字符对应的ASCII码二进制值,再用String.fromCharCode()转成字符。还是以'a'为例,它的二进制是1100001,代码如下:
var ab = [String.fromCharCode(0b1100001)]; document.write(ab[0]); // 同样输出:a
方法二:转成十六进制用Unicode转义(可选)
如果你执着于用转义字符的形式,也可以把二进制先转成十六进制,再用\u{...}的Unicode转义写法(里面放十六进制码点)。比如1100001转成十六进制是61,那代码就是["\u{61}"],不过这个其实和你原来的十六进制例子本质一样,不如第一种方法直接。
额外唠一句:数字的八进制与二进制写法
如果你是想定义数字类型的八进制或二进制值(不是字符串),ES6也有规范的写法:
- 八进制数字:
0o开头,比如var num = 0o141;(等于十进制的97) - 二进制数字:
0b开头,比如var num = 0b1100001;(同样等于97)
这种写法在严格模式下也是合法的,不用担心报错。
内容的提问来源于stack exchange,提问作者Rabib
相关产品推荐
相关产品推荐

