技术开发 频道

CoffeeScript2支持JavaScript提高兼容性

  【IT168 评论】最近CoffeeScript研发团队宣布CoffeeScript 2的发布。CoffeeScript是JavaScript的转译语言,此次CoffeeScript2版本旨在将CoffeeScript引入现代JavaScript时代,缩小与JavaScript兼容性的差距,同时保留CoffeeScript简洁语法,这样以来CoffeeScript未来很可能会成为JavaScript最大威胁。

CoffeeScript支持JavaScript提高兼容性

  CoffeeScript2版本更新主要有以下方面:

  · CoffeeScript 2编译器将CoffeeScript代码转换为现代JavaScript语法。所以在CoffeeScript 中的“=>”现在输出为“=>”,CoffeeScript中的 class现在使用class关键字输出,依此类推。而这意味着用户可能需要传输CoffeeScript编译器的输出。

  · CoffeeScript 2增加了异步函数语法,用于未来对象解构语法以及JSX的支持。一些功能如模块(import和export语句)for…of、标记的模板文字已被反馈到CoffeeScript版本1.11和1.12上。

  · 上述版本中的大多数功能都是通过1.x版本逐步优化的,当前大多数CoffeeScript项目都能够以无需重构的方式进行升级。

  CoffeeScript 2开发的两个主要目标:一是消除现有JavaScript任何不兼容问题,这可能会阻止项目中CoffeeScript的使用;二是尽可能保持向后兼容性。

  JavaScript输出

  一开始CoffeeScript就被称为“just JavaScript”,而现在JavaScript已经发展到了ES2017,CoffeeScript与JavaScript都在不断变化着。许多新的JavaScript功能,例如“=>”都是从CoffeeScript演化的,并且是一对一兼容,这使得许多CoffeeScript的创新成为了新的JS语法,包括{ a } = obj 到 { a } = obj的转化以及"a#{b}c" 到 `a${b}c` 的转化等。

  以下是使用了现代JavaScript语法后主要关于CoffeeScript2.0主要优化点:

  · 类别: class Animal

  · 异步功能: await someFunction()

  · 绑定/箭头功能: =>

  · 功能默认参数: (options = {}) ->

  · 功能splat / rest参数: (items...) ->

  · 解构,对于数组和对象:[first, second] = items,{length} = items

  · 对象休息/传播属性:{options..., force: yes},{force, otherOptions...} = options

  · 内插字符串/模板文字(JS回退字符串): "Hello, #{user}!"

  · 标记的模板文字: html"<strong>coffee</strong>"

  · JavaScript for…of现在可用作CoffeeScript的 for…from:for n from generatorFunction()

CoffeeScript支持JavaScript提高兼容性

  但是值得注意的是,并非所有的CoffeeScript特性都以100%相似的方式被JavaScript采用。JavaScript的默认值只在undefined、undefined 或者 null的情况下在CoffeeScript 1中可用,而其中的classes也有很大的不同。

  大多数突破性的变化都是边缘案例,只影响到很少的人,但是两个突破性的变化却影响了大量项目:

  · 在CoffeeScript 2中,不再允许super无参数调用,必须使用super()或super arguments...替代。

  · 按照JS规范,引用this/ @无法调用super。

  CoffeeScript编译器或者传输器会抛出任何一种情况的错误,所以更新代码主要是为了修复每次出现的错误。

  其他功能支持

  除了支持新的JavaScript功能以及在现代JS语法中输出较旧的CoffeeScript功能,CoffeeScript 2还增加了对以下内容的支持:

  · JSX

  · 行注释输出(CoffeeScript 1这个功能是没有的)

  · 可在任何地方使用注释块,可利用动态注释语法启用静态类型注释。

  另外,CoffeeScript还有许多微小地方的改进,如coffee命令行工具等,而且在CoffeeScript中还有意省略了些JavaScript功能,包括let和const,命名函数get和set关键字等。对于经常被询问的问题,研发人员还在文档中添加了一个名为Unsupported ECMAScript Features部分。CoffeeScript缺少功能的等效项并不影响与JavaScript模块或库的兼容性与互操作性。

  兼容性

  创建CoffeeScript 1时,ES2015 JavaScript和像Babel、Bublé或Traceur这样的编译器已经有好几年了。CoffeeScript编译器必须做现在的透析器所做的工作,将现代功能转换为等效的最低标准的JavaScript。

CoffeeScript支持JavaScript提高兼容性

  现在已经有人解决了这个问题,以后就不需要使用CoffeeScript编译器复制这个功能,所有的CoffeeScript编译器现在需要担心的是将新语法的CoffeeScript版本转换为该语法的JS版本,例如"Hello, #{name}!" 变成了`Hello, ${name}!,这使得添加对新JavaScript特性的支持比以前容易得多。

  近几年来ECMA在CoffeeScript中添加的大多数功能都完全没有任何更新,全局对象或全局对象的新方法不需要CoffeeScript部分的任何更新。一些提出的未来JS功能确实涉及到新的语法,如类字段。据透露,只有当ECMA的进程达到第4阶段时,研发人员才会采用支持新语法的策略,这个语法可能会成为最终语法,最终于发很有可能出现在下一个ES版本中。但是也说不定,可能功能会在达到第4阶段之前就支持了,那时应该是使用等效的非实验语法而不是新提出的语法输出,2.0.0中的对象解构就是这样。

0
相关文章