浅析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 相关文章推荐
jQuery插件的写法分享
Jun 12 Javascript
setInterval()和setTimeout()的用法和区别示例介绍
Nov 17 Javascript
jquery和javascript中如何将一元素的内容赋给另一元素
Jan 09 Javascript
js实现select跳转菜单新窗口效果代码分享(超简单)
Aug 21 Javascript
jquery popupDialog 使用 加载jsp页面的方法
Oct 25 Javascript
纯js实现动态时间显示
Sep 07 Javascript
一次围绕setTimeout的前端面试经验分享
Jun 15 Javascript
Vue 父子组件的数据传递、修改和更新方法
Mar 01 Javascript
JS实现模糊查询带下拉匹配效果
Jun 21 Javascript
用WebStorm进行Angularjs 2开发(环境篇:Windows 10,Angular-cli方式)
Dec 05 Javascript
微信小程序webview组件交互,内联h5页面并网页实现微信支付实现解析
Aug 16 Javascript
11个Javascript小技巧帮你提升代码质量(小结)
Dec 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
社区(php&&mysql)一
2006/10/09 PHP
PHP与SQL注入攻击[二]
2007/04/17 PHP
php连接mysql数据库代码
2009/03/10 PHP
php如何连接sql server
2015/10/16 PHP
Laravel中Trait的用法实例详解
2016/03/16 PHP
PHP根据key删除数组中指定的元素
2019/02/28 PHP
IE与FireFox的兼容性问题分析
2007/04/22 Javascript
推荐自用 Javascript 缩图函数 (onDOMLoaded)……
2007/10/23 Javascript
utf-8编码引起js输出中文乱码的解决办法
2010/06/23 Javascript
解析使用js判断只能输入数字、字母等验证的方法(总结)
2013/05/14 Javascript
JavaScript中把数字转换为字符串的程序代码
2013/06/19 Javascript
JavaScript中的this关键字使用方法总结
2015/03/13 Javascript
javascript数组克隆简单实现方法
2015/12/16 Javascript
BootStrap实用代码片段之一
2016/03/22 Javascript
Bootstrap基本插件学习笔记之Popover提示框(19)
2016/12/08 Javascript
利用HTML5+Socket.io实现摇一摇控制PC端歌曲切换
2017/01/13 Javascript
JavaScript实现精美个性导航栏筋斗云效果
2017/10/29 Javascript
vue打包的时候自动将px转成rem的操作方法
2018/06/20 Javascript
vue router动态路由设置参数可选问题
2019/08/21 Javascript
使用layui日期控件laydate对开始和结束时间进行联动控制的方法
2019/09/06 Javascript
autojs 蚂蚁森林能量自动拾取即给指定好友浇水的实现方法
2020/05/03 Javascript
js闭包和垃圾回收机制示例详解
2021/03/01 Javascript
一个Python最简单的接口自动化框架
2018/01/02 Python
python使用knn实现特征向量分类
2018/12/26 Python
详解Python logging调用Logger.info方法的处理过程
2019/02/12 Python
Django框架静态文件使用/中间件/禁用ip功能实例详解
2019/07/22 Python
Django models.py应用实现过程详解
2019/07/29 Python
Html5游戏开发之乒乓Ping Pong游戏示例(一)
2013/01/21 HTML / CSS
印尼第一大家居、生活和家具电子商务:Ruparupa
2019/11/25 全球购物
2014学年自我鉴定
2014/02/23 职场文书
2014年国庆节演讲稿
2014/09/19 职场文书
大学生自荐书范文
2015/03/05 职场文书
机械生产实习心得体会
2016/01/22 职场文书
六年级语文教学反思
2016/03/03 职场文书
JavaWeb Servlet实现网页登录功能
2021/07/04 Java/Android
Jpa Specification如何实现and和or同时使用查询
2021/11/23 Java/Android