浅析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实现unicode和字符的互相转换
Jul 18 Javascript
Javascript MVC框架Backbone.js详解
Sep 18 Javascript
node.js中RPC(远程过程调用)的实现原理介绍
Dec 05 Javascript
jQuery事件绑定与解除绑定实现方法
Apr 15 Javascript
浅谈Javascript数据属性与访问器属性
Jul 26 Javascript
深入理解jQuery3.0的domManip函数
Sep 01 Javascript
jQuery实现弹幕效果
Feb 17 Javascript
基于ExtJs在页面上window再调用Window的事件处理方法
Jul 26 Javascript
微信小程序+云开发实现欢迎登录注册
May 24 Javascript
vue项目部署到nginx/tomcat服务器的实现
Aug 26 Javascript
vue created钩子函数与mounted钩子函数的用法区别
Nov 05 Javascript
Vue 实例中使用$refs的注意事项
Jan 29 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
德生H-501的评价与改造
2021/03/02 无线电
APMServ使用说明
2006/10/23 PHP
推荐25款php中非常有用的类库
2014/09/29 PHP
PHP采集静态页面并把页面css,img,js保存的方法
2014/12/23 PHP
php给每个段落添加空格的方法
2015/03/20 PHP
Javascript中暂停功能的实现代码
2007/03/04 Javascript
判断浏览器的javascript版本的代码
2010/09/03 Javascript
jQuery初学:find()方法及children方法的区别分析
2011/01/31 Javascript
对setInterval在火狐和chrome切换标签产生奇怪的效果之探索,与解决方案!
2011/10/29 Javascript
Javascript跨域请求的4种解决方式
2013/03/17 Javascript
jQuery模拟黑客帝国矩阵效果实例
2015/06/28 Javascript
jQuery实现的类似淘宝网站搜索框样式代码分享
2015/08/24 Javascript
jQuery javascript获得网页的高度与宽度的实现代码
2016/04/26 Javascript
jquery之别踩白块游戏的简单实现
2016/07/25 Javascript
BootStrap Fileinput初始化时的一些参数
2016/12/30 Javascript
select下拉框插件jquery.editable-select详解
2017/01/22 Javascript
详解Vue的computed(计算属性)使用实例之TodoList
2017/08/07 Javascript
微信小程序获取手机网络状态的方法【附源码下载】
2017/12/08 Javascript
详解关于JSON.parse()和JSON.stringify()的性能小测试
2019/03/14 Javascript
小程序使用分包的示例代码
2020/03/23 Javascript
js加减乘除精确运算方法实例代码
2021/01/17 Javascript
python实现代码行数统计示例分享
2014/02/10 Python
python进阶教程之函数对象(函数也是对象)
2014/08/30 Python
Python排序搜索基本算法之插入排序实例分析
2017/12/11 Python
Python button选取本地图片并显示的实例
2019/06/13 Python
django foreignkey(外键)的实现
2019/07/29 Python
使用keras2.0 将Merge层改为函数式
2020/05/23 Python
Python-opencv实现红绿两色识别操作
2020/06/04 Python
html5中canvas学习笔记1-画板的尺寸与实际显示尺寸
2013/01/06 HTML / CSS
伊芙丽官方旗舰店:中国淑女一线品牌
2017/12/01 全球购物
美国汽车轮胎和轮毂销售网站:Tire Rack
2018/01/11 全球购物
美国儿童服装、家具和玩具精品店:Maisonette
2019/11/24 全球购物
毕业生大学生活自我总结
2014/01/31 职场文书
高中学生评语大全
2014/04/25 职场文书
初三数学教学反思
2016/02/17 职场文书
python字符串拼接.join()和拆分.split()详解
2021/11/23 Python