浅析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 相关文章推荐
Js表格万条数据瞬间加载实现代码
Feb 20 Javascript
jquery实现人性化的有选择性禁用鼠标右键
Jun 30 Javascript
JQuery 给元素绑定click事件多次执行的解决方法
Sep 09 Javascript
Javascript获取当前日期的农历日期代码
Oct 08 Javascript
jQuery按需加载轮播图(web前端性能优化)
Feb 17 Javascript
js实现返回顶部效果
Mar 10 Javascript
React-Native实现ListView组件之上拉刷新实例(iOS和Android通用)
Jul 11 Javascript
vue-cli如何引入bootstrap工具的方法
Oct 19 Javascript
新版vue-cli模板下本地开发环境使用node服务器跨域的方法
Apr 03 Javascript
Element-ui DatePicker显示周数的方法示例
Jul 19 Javascript
vue2.0 获取从http接口中获取数据,组件开发,路由配置方式
Nov 04 Javascript
vue-cil之axios的二次封装与proxy反向代理使用说明
Apr 07 Vue.js
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 柱状图实现代码
2009/12/04 PHP
测试PHP连接MYSQL成功与否的代码
2013/08/16 PHP
帝国CMS留言板回复后发送EMAIL通知客户
2015/07/06 PHP
Laravel路由设定和子路由设定实例分析
2016/03/30 PHP
PHP实现小程序批量通知推送
2018/11/27 PHP
基于JQuery.timer插件实现一个计时器
2010/04/25 Javascript
JavaScript插入动态样式实现代码
2012/02/22 Javascript
js获取本机的外网/广域网ip地址完整源码
2013/08/12 Javascript
javascript验证身份证完全方法具体实现
2013/11/18 Javascript
JavaScript修改css样式style动态改变元素样式
2013/12/16 Javascript
基于javascript实现彩票随机数生成(升级版)
2020/04/17 Javascript
总结Javascript中数组各种去重的方法
2016/10/04 Javascript
利用D3.js实现最简单的柱状图示例代码
2016/12/09 Javascript
JS实现生成由字母与数字组合的随机字符串功能详解
2018/05/25 Javascript
JavaScript错误处理操作实例详解
2019/01/04 Javascript
微信小程序实现元素渐入渐出动画效果封装方法
2019/05/18 Javascript
Vue触发隐藏input file的方法实例详解
2019/08/14 Javascript
vue中的循环对象属性和属性值用法
2020/09/04 Javascript
[42:20]2014 DOTA2华西杯精英邀请赛5 24 DK VS NewBee
2014/05/25 DOTA
python使用xmlrpc实例讲解
2013/12/17 Python
解决python写的windows服务不能启动的问题
2014/04/15 Python
python中while循环语句用法简单实例
2015/05/07 Python
python实现的二叉树定义与遍历算法实例
2017/06/30 Python
Python基于QRCode实现生成二维码的方法【下载,安装,调用等】
2017/07/11 Python
python 系统调用的实例详解
2017/07/11 Python
Python基于list的append和pop方法实现堆栈与队列功能示例
2017/07/24 Python
简单谈谈python中的语句和语法
2017/08/10 Python
Python实现线程状态监测简单示例
2018/03/28 Python
python如何发布自已pip项目的方法步骤
2018/10/09 Python
python使用suds调用webservice接口的方法
2019/01/03 Python
Python3实现的回文数判断及罗马数字转整数算法示例
2019/03/27 Python
详解python列表(list)的使用技巧及高级操作
2019/08/15 Python
澳大利亚百货商店中销量第一的商务衬衫品牌:Van Heusen
2018/07/26 全球购物
中文专业自荐书
2014/06/29 职场文书
带刀到教室的检讨书
2014/10/04 职场文书
八一建军节慰问信
2015/02/14 职场文书