ES6 新特性:八进制与二进制整数字面量的使用指南
ES6 引入了新的八进制和二进制整数字面量语法,分别使用 0o/0O 和 0b/0B 前缀。本文解析了为何需要新的八进制写法以解决严格模式下的兼容性问题,并对比了新旧语法在代码可读性与一致性上的差异。同时介绍了二进制字面量的具体应用及浏览器支持情况,帮助开发者更规范地使用这些新特性。
前言
八进制整数字面量的新语法
早在 SpiderMonkey 引擎实现严格模式时,我们就注意到严格模式禁止了使用前导零表示八进制整数的旧写法。这一限制的原因在于,部分初学者习惯利用前导零来对齐多行代码中的数字,这往往会导致计算结果与预期不符。
var sum = 015 + // 相当于十进制的13,而不是15
197 +
001; // 反正是1
console.log(sum) // 相加得到的和是211,而不是新手认为的213
然而,仍有不少开发者(包括 Mozilla 扩展及 Node.js 开发者)需要处理八进制整数,典型场景如文件权限设置(如 755、644)。为此,ES6 规范引入了新的八进制整数字面量语法。与十六进制使用 0x 或 0X 前缀类似,新的八进制语法采用 0o 或 0O 作为前导标识,后接 0 到 7 的数字字符。这种明确的语法避免了新手因前导零产生的混淆。
var DEFAULT_PERMS = 0o644; // 严格模式下也可用
需要指出的是,0O 前缀的可读性较差,因为数字 0 与大写字母 O 极易混淆。我在 esdiscuss 社区曾提议禁用大写的 0O 前缀,但 TC39 委员会目前的决定是优先保证语法的一致性(即与 0x、0B 等保持风格统一)。尽管该决定值得商榷,但我强烈建议开发者始终避免使用大写的 0O 前缀。
二进制整数字面量的支持
此外,部分开发者也期望支持二进制整数字面量,而 ECMAScript 此前并未提供此功能。ES6 正式支持了二进制字面量,其语法与八进制、十六进制类似,使用 0b 或 0B 作为前缀。
var FLT_SIGNBIT = 0b10000000000000000000000000000000;
var FLT_EXPONENT = 0b01111111100000000000000000000000;
var FLT_MANTISSA = 0b00000000011111111111111111111111;
目前,Firefox Aurora 版本已实现了这两种新语法,若希望尝试更前沿的功能,可以使用更新的 Firefox Nightly 版本。
总结
本文介绍了 ES6 中八进制与二进制整数字面量的具体用法及背景。希望这些内容能帮助您更好地掌握 ES6 新特性。如有任何疑问,欢迎留言交流。
JavaScript异步发送HTTP请求时怎么优雅地处理错误
2026-11-05 17:10:44
5款主流JS在线运行工具对比:CodePen、JSFiddle与StackBlitz怎么选
2026-11-05 17:04:04
JavaScript入门书籍避坑:这些书不适合初学者
2026-11-05 16:31:15
JS使用Math.round实现保留两位小数的原理与代码
2026-11-05 15:35:55
JavaScript 原生 Date 对象怎么实现日期加减
2026-11-05 14:30:00
