浅析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 相关文章推荐
静态的动态续篇之来点XML
Dec 23 Javascript
解析Jquery的LigerUI如何实现文件上传
Jul 09 Javascript
jQuery实现列表自动循环滚动鼠标悬停时停止滚动
Sep 06 Javascript
JQuery的$命名冲突详细解析
Dec 28 Javascript
Area 区域实现post提交数据的js写法
Apr 22 Javascript
原生的html元素选择器类似jquery选择器
Oct 15 Javascript
JavaScript过滤字符串中的中文与空格方法汇总
Mar 07 Javascript
jquery表单验证插件formValidator使用方法
Apr 01 Javascript
ES6正则表达式扩展笔记
Jul 25 Javascript
jQuery实现注册会员时密码强度提示信息功能示例
Sep 05 jQuery
Node.js+jade抓取博客所有文章生成静态html文件的实例
Sep 19 Javascript
详解vue 组件
Jun 11 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中使用XML
2006/10/09 PHP
PHP基于ORM方式操作MySQL数据库实例
2017/06/21 PHP
PHP中使用CURL发送get/post请求上传图片批处理功能
2018/10/15 PHP
PHP类的自动加载机制实现方法分析
2019/01/10 PHP
php根据命令行参数生成配置文件详解
2019/03/15 PHP
PHP+百度AI OCR文字识别实现了图片的文字识别功能
2019/05/08 PHP
根据邮箱的域名跳转到相应的登录页面的代码
2012/02/27 Javascript
js限制文本框输入长度两种限制方式(长度、字节数)
2012/12/19 Javascript
jquery实现类似淘宝星星评分功能实例
2014/09/12 Javascript
jQuery带时间的日期控件代码分享
2015/08/26 Javascript
jsonp跨域请求实现示例
2017/03/13 Javascript
js微信应用场景之微信音乐相册案例分享
2017/08/11 Javascript
基于Vue2.X的路由和钩子函数详解
2018/02/09 Javascript
jQuery实现判断滚动条滚动到document底部的方法分析
2019/08/27 jQuery
javascript 设计模式之享元模式原理与应用详解
2020/04/08 Javascript
JavaScript中常用的3种弹出提示框(alert、confirm、prompt)
2020/11/10 Javascript
python实现360皮肤按钮控件示例
2014/02/21 Python
python操作CouchDB的方法
2014/10/08 Python
如何在sae中设置django,让sae的工作环境跟本地python环境一致
2017/11/21 Python
Python基于socket模块实现UDP通信功能示例
2018/04/10 Python
python 调用有道api接口的方法
2019/01/03 Python
python GUI模拟实现计算器
2020/06/22 Python
Windows下pycharm安装第三方库失败(通用解决方案)
2020/09/17 Python
CSS3制作日历实现代码
2012/01/21 HTML / CSS
Muziker英国:中欧最大的音乐家商店
2020/02/05 全球购物
物业保安员岗位职责制度
2014/01/30 职场文书
教师演讲稿大全
2014/05/16 职场文书
体育教师求职信
2014/05/24 职场文书
纪检干部先进事迹材料
2014/08/23 职场文书
安阳殷墟导游词
2015/02/10 职场文书
乒乓球比赛通知
2015/04/27 职场文书
接收函
2019/04/22 职场文书
AJAX学习笔记
2021/05/18 Javascript
Python 读写 Matlab Mat 格式数据的操作
2021/05/19 Python
聊一聊Redis与MySQL双写一致性如何保证
2021/06/26 Redis
25张裸眼3D图片,带你重温童年的记忆,感受3D的魅力
2022/02/06 杂记