浅析ES6的八进制与二进制整数字面量


Posted in Javascript onAugust 30, 2016

前言

在几年前,当SpiderMonkey实现了严格模式的时候.我了解到,严格模式禁用了八进制整数字面量的写法.因为有证据表明,一些新手会利用前导0来对齐多行中的数字,从而导致意想不到的结果:

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能有所帮助。如果有疑问可以留言交流。

Javascript 相关文章推荐
javascript编程起步(第四课)
Feb 27 Javascript
JavaScript修改css样式style
Apr 15 Javascript
基于jQuery的合并表格中相同文本的相邻单元格的代码
Apr 06 Javascript
javascript计算当月剩余天数(天数计算器)示例代码
Jan 09 Javascript
JavaScript中window.showModalDialog()用法详解
Dec 18 Javascript
js实现根据身份证号自动生成出生日期
Dec 15 Javascript
详解vue事件对象、冒泡、阻止默认行为
Mar 20 Javascript
jQuery中库的引用方法
Jan 06 jQuery
详解Angular结合zTree异步加载节点数据
Jan 20 Javascript
vue中实现移动端的scroll滚动方法
Mar 03 Javascript
详解javascript函数写法大全
Mar 25 Javascript
实现一个 Vue 吸顶锚点组件方法
Jul 10 Javascript
AngularJS轻松实现双击排序的功能
Aug 30 #Javascript
jQuery simpleModal插件的使用介绍
Aug 30 #Javascript
Angular懒加载机制刷新后无法回退的快速解决方法
Aug 30 #Javascript
AngularJS 实现弹性盒子布局的方法
Aug 30 #Javascript
浅谈javascript中的Function和Arguments
Aug 30 #Javascript
javascript 中的console.log和弹出窗口alert
Aug 30 #Javascript
Laravel中常见的错误与解决方法小结
Aug 30 #Javascript
You might like
PHP统计目录下的文件总数及代码行数(去除注释及空行)
2011/01/17 PHP
thinkphp配置文件路径的实现方法
2016/08/30 PHP
实例分析PHP将字符串转换成数字的方法
2019/01/27 PHP
PHP重载基础知识回顾
2020/09/10 PHP
JavaScript 应用技巧集合[推荐]
2009/08/30 Javascript
JS window.opener返回父页面的应用
2009/10/24 Javascript
jQuery 入门级学习笔记及源码
2010/01/22 Javascript
前台js改变Session的值(用ajax实现)
2012/12/28 Javascript
gridpanel动态加载数据的实例代码
2013/07/18 Javascript
JS脚本defer的作用示例介绍
2014/01/02 Javascript
jquery选择器需要注意的问题
2014/11/26 Javascript
Nodejs学习笔记之Global Objects全局对象
2015/01/13 NodeJs
JS添加删除DIV的简单实例
2016/07/08 Javascript
JavaScript & jQuery完美判断图片是否加载完毕
2017/01/08 Javascript
js中数组插入、删除元素操作的方法
2017/02/15 Javascript
angularjs手动识别字符串中的换行符方法
2018/10/02 Javascript
小程序实现左滑删除功能
2018/10/30 Javascript
JS数组去重的6种方法完整实例
2018/12/08 Javascript
Nodejs对postgresql基本操作的封装方法
2019/02/20 NodeJs
Vue内部渲染视图的方法
2019/09/02 Javascript
TypeScript魔法堂之枚举的超实用手册
2020/10/29 Javascript
Python存取XML的常见方法实例分析
2017/03/21 Python
如何用python写一个简单的词法分析器
2018/12/18 Python
Python代码实现http/https代理服务器的脚本
2019/08/12 Python
Django如何使用jwt获取用户信息
2020/04/21 Python
Python爬取YY评级分数并保存数据实现过程解析
2020/06/01 Python
Python之字符串的遍历的4种方式
2020/12/08 Python
《从现在开始》教学反思
2014/04/15 职场文书
工作保证书范文
2014/04/29 职场文书
春季防火方案
2014/05/10 职场文书
3.15消费者权益日活动总结
2015/02/09 职场文书
个人自荐书怎么写
2015/03/26 职场文书
2019年最新七夕唯美祝福语(60条)
2019/07/22 职场文书
pytorch 实现变分自动编码器的操作
2021/05/24 Python
一文搞懂Python Sklearn库使用
2021/08/23 Python
mysql中数据库覆盖导入的几种方式总结
2022/03/25 MySQL