浅析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 相关文章推荐
简单实现异步编程promise模式
Jul 31 Javascript
解决js图片加载时出现404的问题
Nov 30 Javascript
jQuery获取table行数并输出单元格内容的实现方法
Jun 30 Javascript
JSON 对象未定义错误的解决方法
Sep 29 Javascript
Angular directive递归实现目录树结构代码实例
May 05 Javascript
详解Vue组件之间的数据通信实例
Jun 17 Javascript
JavaScript实现简单的文本逐字打印效果示例
Apr 12 Javascript
详解微信小程序开发用户授权登陆
Apr 24 Javascript
JQuery属性操作与循环用法示例
May 15 jQuery
layui的面包屑或者表单不显示的解决方法
Sep 05 Javascript
JavaScript数组排序功能简单实现
May 14 Javascript
详解javascript脚本何时会被执行
Feb 05 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
dedecms防止FCK乱格式化你的代码的修改方法
2007/03/17 PHP
基于PHP Socket配置以及实例的详细介绍
2013/06/13 PHP
PHP连接数据库实现注册页面的增删改查操作
2016/03/27 PHP
php接口技术实例详解
2016/12/07 PHP
ThinkPHP3.1.2 使用cli命令行模式运行的方法
2020/04/14 PHP
JQUBar 基于JQUERY的柱状图插件
2010/11/23 Javascript
Google Maps API地图应用示例分享
2014/10/23 Javascript
ECMAScript 5中的属性描述符详解
2015/03/02 Javascript
jQuery基于muipicker实现仿ios时间选择
2016/02/22 Javascript
微信小程序日历组件calendar详解及实例
2017/06/08 Javascript
详解node+express+ejs+bootstrap构建项目
2017/09/27 Javascript
vue.js vue-router如何实现无效路由(404)的友好提示
2017/12/20 Javascript
Vue.js做select下拉列表的实例(ul-li标签仿select标签)
2018/03/02 Javascript
vue+vuex+axios实现登录、注册页权限拦截
2018/03/09 Javascript
vue定义全局变量和全局方法的方法示例
2018/08/01 Javascript
[01:46]新英雄登场
2019/09/10 DOTA
用python实现面向对像的ASP程序实例
2014/11/10 Python
Python使用email模块对邮件进行编码和解码的实例教程
2016/07/01 Python
详解python的ORM中Pony用法
2018/02/09 Python
利用Python计算KS的实例详解
2020/03/03 Python
Python替换NumPy数组中大于某个值的所有元素实例
2020/06/08 Python
Keras 中Leaky ReLU等高级激活函数的用法
2020/07/05 Python
css3实现一款模仿iphone样式的注册表单
2013/03/20 HTML / CSS
来自南加州灵感的工作和娱乐服装:TravisMathew
2019/05/01 全球购物
英国的一家创新礼品和小工具零售商:Menkind
2019/08/24 全球购物
Java和Javasciprt的区别
2012/09/02 面试题
通信工程专业女生个人求职信
2013/09/21 职场文书
人事专员工作职责
2014/02/22 职场文书
国培远程培训感言
2014/03/08 职场文书
绩效工资实施方案
2014/03/15 职场文书
幼儿园小班教师寄语
2014/04/03 职场文书
社区护士演讲稿
2014/08/27 职场文书
学生党员批评与自我批评
2014/10/15 职场文书
《棉鞋里的阳光》教学反思
2016/02/20 职场文书
如何理解及使用Python闭包
2021/06/01 Python
springboot 多数据源配置不生效遇到的坑及解决
2021/11/17 Java/Android