OurJS


OurJS-我们的JS, 我们的技术-IT文摘; 专注JS相关领域;
我们热爱编程, 我们热爱技术;我们是高大上, 有品味的码农;

欢迎您订阅我们的技术周刊


我们会向您分享我们精心收集整理的,最新的行业资讯,技术动态,外文翻译,热点文章;
我们使用第三方邮件列表向您推送,我们不保存您的任何个人资料,注重您的隐私,您可以随时退订,

欢迎分享您的观点,经验,技巧,心得

让我们一起找寻程序员的快乐,探索技术, 发现IT人生的乐趣;


本网站使用缓存技术每次加载仅需很小流量, 可在手机中流畅浏览;
如果您发现任何BUG,请即时告知我们: ourjs(at)ourjs.com

为JavaScript设计一个指数操作(运算)符


分享到
分类 技术前沿   关键字 JavaScript   发布 ourjs  1407895723239
注意 转载须保留原文链接,译文链接,作者译者等信息。  
在本文中,我将探讨如何为JavaScript设计一个新的幂运算符,我已经在提交了TC39的审议,并考虑加入ES7的语法规范。

在许多编程语言中,幂通过一个算术运算符来表达; 最常见的为x** y(Python和F#,Ruby,Perl等等),或 X^Y(BASIC,Lua中,MATLAB,R等)。其他语言包括JavaScript和C#依靠内置对象提供的一个函数来实现:Math.pow 和 Math.Pow。 

在JavaScript中通过一个特定的符号实现一个求幂运算,这是有道理的,这将更加有利于这种语言的教学和学习,因为它更加符合现代人的思维习惯。从上段所描述的两种设计中,我选择了**的形式,因为字符^已经被JavaScript用在按位异或运算中。该**形式可以更好的兼容复合赋值运算格式:**=,而且这种语义等价于内置函数Math.pow(假设它是完全按ECMA-262的定义来实现 )。 

代码

现有和将来的JavaScript实现形式:

Math.pow(2, 4) === 16;
Math.pow(-2, -4) === 0.0625;
2 ** 4 === 16;
-2 ** -4 === 0.0625;
var a = 2;
var b = -2;
a **= 4;
a === 16;
b **= -4;
b === 0.0625;

在为ES7定义一个新的语法形式之前,我们来看看现有的算述操作的语法定义。在ES5(和ES6)乘法表达式(MultiplicativeExpression)具有最高的优先级,然后是一元表达式(UnaryExpression),接着是附加表达式(AdditiveExpression)(等等 ): 

MultiplicativeExpression :
  UnaryExpression
  MultiplicativeExpression * UnaryExpression
  MultiplicativeExpression / UnaryExpression
  MultiplicativeExpression % UnaryExpression


这意味着下面的两个表达式有相同的结果:

-2 * 2 + 1 === -3;
1 + -2 * 2 === -3;

这是因为它们被以完全相同的顺序进行运算,尽管写的顺序不同,运算顺序是: 

1. 一元(-2) 
2. 乘法(-2*2) 
3. 一元运算符(-4,步骤2的结果) 
4. 结果(-4 + 1,1 + -4) 

幂运算一定要先于乘法,更重要的是,BNF范示必须被支持 ,使得运行是按右优先结合(不像MultiplicativeExpression,这是左结合)。下面的等示说明了关联性的要求:

a ** b ** c === Math.pow(a, Math.pow(b, c));

新的幂表达式(ExponentiationExpression)将取代乘表达示(MultiplicativeExpression)中的的一元表达式(UnaryExpression);变化如下: 

ExponentiationExpression : 
  UnaryExpression
  UnaryExpression ** ExponentiationExpression
MultiplicativeExpression :
  ExponentiationExpression
  MultiplicativeExpression * ExponentiationExpression
  MultiplicativeExpression / ExponentiationExpression
  MultiplicativeExpression % ExponentiationExpression


最后,复合赋值操作符将被添加到AssignmentOperator(赋值运算符)列表: 

AssignmentOperator : one of
  =
  *=
  /=
  %=
  +=
  -=
  <<=
  >>=
  >>>=
  &=
  ^=
  |=
  **=

截至今年,TC39 已经进入ECMAScript的四阶段审核过程。 并且,Erik Arvidsson已经用谷歌的试验编译器实现了一个验证版本。该提案是公开的进度可以在TC39/ECMA262进行跟踪。
原文地址: 点此
社区评论 ( Beta版 )
OnceDoc 您自己的企业内容管理系统——文档、流程、知识库、报表、网盘All In One

访问404页面,寻找丢失儿童
 热门文章 - 分享最多
  1. OurJS-免费开源的博客引擎,论坛系统,网站模板和轻量级的CMS
  2. 痛苦的Java程序员
  3. JavaScript:世界上误解最深的语言
  4. 我不懂Swift
  5. 微软开源TypeScript编绎器
  6. CSS字体大小: em与px、pt、百分比之间的对比
  7. 开源的多行字符串工具: 在JS中整段地写HTML
  8. 树树莓派推出新版本Model B+
  9. 在nginx中使用lua脚本
  10. TJ Holowaychuk将Express维护权移交给StrongLoop
  11. AirJD-简单好用的免费建站工具

 相关阅读 - 技术前沿
  1. TJ Holowaychuk将Express维护权移交给StrongLoop
  2. 主流搜索引擎闯入Linux命令行世界
  3. Android即将支持GO语言,从游戏开始
  4. 8款适合Linux用户使用的数据库管理工具!
  5. 用Javascript制造机器人和火箭
  6. 10个值得一用的CSS框架
  7. Java中8个顶级开源NoSQL数据库
  8. 树莓派进阶学习的五个建议
  9. 是什么让Node.js比Java更快?
  10. 有关GO和Erlang的一些思考

 关键字 - JavaScript
  1. 如何用CSS将select/option文本居中或居右对齐
  2. 用原生HTML5控件实现输入框自动提示(下拉列表补全)功能
  3. JavaScript中怪异的地方
  4. 在JavaScript中创建命名空间的几种写法
  5. JavaScript中的继承,构造函数以及new关键字的作用
  6. 纽约时报使用Html5 WebRTC记录访问者IP地址
  7. 正则中test、exec、match的简单区别,以及括号的用法
  8. NativeScript的工作原理:用JavaScript调用原生API实现跨平台
  9. 2015年的JavaScript:Angular之类的框架将被库取代
  10. 少年,不要滥用箭头函数啊:JS中lambda表达式的优缺点和使用场景

 欢迎订阅 - 技术周刊

我们热爱编程, 我们热爱技术; 我们是高端, 大气, 上档次, 有品味, 时刻需要和国际接轨的码农; 欢迎您订阅我们的技术周刊; 您只需要在右上角输入您的邮箱即可; 我们注重您的隐私,您可以随时退订.
加入我们吧! 让我们一起找寻码农的快乐,探索技术, 发现IT人生的乐趣;


 关注我们

我们的微信公众号: ourjs-com
打开微信扫一扫即可关注我们:
IT文摘-程序员(码农)技术周刊

ourjs官方微信号