浅析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 相关文章推荐
JQuery1.6 使用方法三
Nov 23 Javascript
js 实现 input type="file" 文件上传示例代码
Aug 07 Javascript
javascript操作css属性
Dec 30 Javascript
鼠标拖拽移动子窗体的JS实现
Feb 25 Javascript
在jQuery中使用$而避免跟其它库产生冲突的方法
Aug 13 Javascript
jquery点击缩略图切换视频播放特效代码分享
Sep 15 Javascript
javascript中tostring()和valueof()的用法及两者的区别
Nov 16 Javascript
jQuery实现div随意拖动的实例代码(通用代码)
Jan 28 Javascript
js实现文字超出部分用省略号代替实例代码
Sep 01 Javascript
vue mounted组件的使用
Jun 18 Javascript
Vue分页器实现原理详解
Jun 28 Javascript
React生命周期原理与用法踩坑笔记
Apr 28 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
swfupload 多文件上传实现代码
2008/08/27 PHP
php实现统计网站在线人数的方法
2015/05/12 PHP
php+ajax无刷新上传图片实例代码
2015/11/17 PHP
PHP仿微信多图片预览上传实例代码
2016/09/13 PHP
php实现文件与16进制相互转换的方法示例
2017/02/16 PHP
实例讲解PHP页面静态化
2018/02/05 PHP
如何在PHP中读写文件
2020/09/07 PHP
window.open被浏览器拦截后的自定义提示效果代码
2007/11/19 Javascript
说说掌握JavaScript语言的思想前提想学习js的朋友可以看看
2009/04/01 Javascript
js setTimeout opener的用法示例详解
2013/10/23 Javascript
javascript删除option选项的多种方法总结
2013/11/22 Javascript
js加入收藏以及使用Jquery更改透明度
2014/01/26 Javascript
javascript模拟订火车票和退票示例
2014/04/24 Javascript
深入探讨javascript函数式编程
2015/10/11 Javascript
详解javascript实现自定义事件
2016/01/19 Javascript
jquery.zclip轻量级复制失效问题
2017/01/08 Javascript
mongoose中利用populate处理嵌套的方法
2017/05/26 Javascript
vue.js学习之vue-cli定制脚手架详解
2017/07/02 Javascript
Vue-component全局注册实例
2018/09/06 Javascript
js Math数学简单使用操作示例
2020/03/13 Javascript
vue data对象重新赋值无效(未更改)的解决方式
2020/07/24 Javascript
使用python编写android截屏脚本双击运行即可
2014/07/21 Python
Python基于QRCode实现生成二维码的方法【下载,安装,调用等】
2017/07/11 Python
python中import与from方法总结(推荐)
2019/03/21 Python
python判断单向链表是否包括环,若包含则计算环入口的节点实例分析
2019/10/23 Python
python根据用户需求输入想爬取的内容及页数爬取图片方法详解
2020/08/03 Python
python判断元素是否存在的实例方法
2020/09/24 Python
Python爬取梨视频的示例
2021/01/29 Python
小学少先队辅导员述职报告
2015/01/10 职场文书
致地震灾区的慰问信
2015/03/23 职场文书
英雄儿女观后感
2015/06/09 职场文书
python pyhs2 的安装操作
2021/04/07 Python
浅谈MySQL next-key lock 加锁范围
2021/06/07 MySQL
python中opencv实现图片文本倾斜校正
2021/06/11 Python
Ajax实现异步加载数据
2021/11/17 Javascript
JS实现数组去重的11种方法总结
2022/04/04 Javascript