用ES6代替CoffeeScript

我一直在关注JavaScript的下一个版本ES6,而且最后有机会在一个项目中使用了它。在我使用它短暂时间内,我发现在不发生巨大语法变化的情况下,解决了很多CoffeeScript 试图解决的问题。

现在使用ES6

我们现在就可以开始使用ES6,通过 6to5项目可以将ES6代码转换成ES5。6to5能支持大量的构建工具包括Broccoli、Grunt、 Gulp和Sprockets。我使用sprockets-es6已经很成功,Sprockets 4.x将为6to5提供开箱即用的支持。

如果你使用Vim,你想将.es6文件扩展名与JavaScript关联,请将以下代码放到你的. vimrc。

你还可以使用 6to5 REPL 在您的浏览器中尝试ES6。

CoffeeScript和ES6都有类的支持。让我们看看CoffeeScript类与ES6的区别。
CoffeeScript允许我们通过参数、字符串插值(interpolation)设置实例变量,同时不使用括号调用函数:

在ES6中,我们可以使用class、getter和setter方法:

如果你在JavaScript中使用任何提供class功能的库或框架、你会注意到ES6语法有一些细微的差别:

  • 函数名后没有分号
  • 函数关键字省略了
  • 每个定义后没有逗号

我们也可以利用getter和setter的优势,它允许我们把name函数当做属性对待。

插值

我经常希望JavaScript能有一个更强大的字符串语法。幸运的是ES6引入了 模板字符串。让我们来对比CoffeeScript字符串、JavaScript字符串、模板字符串、看看每个的功能。

CoffeeScript:

JavaScript 字符串:

ES6模板字符串:

我们可以在前面的示例利用模板字符串,按如下方式改写name的getter方法:

这比我们之前使用的字符串拼接方式要感觉更加干净,使我们更接近CoffeeScript的例子。

大箭头(Fat arrows)

使得CoffeeScript有如此吸引力的另一个功能,也出现在ES6,即大箭头。大箭头允许我们将函数绑定到的当前this的值上。首先,让我们看看在不使用大箭头时,我们是如何处理这个问题的。

在ES5中,我们必须在定义函数保存一个对当前this值的引用:

CoffeeScript大箭头可以完全省略参数和括号:

ES6大箭头需要括号,可以带或不带参数:

其它特性

ES6有一些其他特性值得关注。

默认参数

CoffeeScript:

ES6:

Splats

Variadic functions(可变参数函数), 在CoffeeScript叫做splats。允许你以一个数组收集传递给函数附加参数。ES6中叫做rest参数。

CoffeeScript:

ES6:

解构

解构允许你通过模式匹配从数组和对象提取特定的值。

CoffeeScript:

ES6:

我们可以在前面定义的name setter方法中使用解构,使代码更简洁:

总结

ES6 transpilers(转换编译器)的开发非常活跃,它在功能上正迎头赶上CoffeeScript。这篇文章只涉及ES6给JavaScript带来的少数功能,你可以在这里找到更多关于本文提到的以及其它特性。

在你的下一个项目把CoffeeScript放在一边,拿ES6试一试!

1 1 收藏 1 评论

关于作者:cucr

新浪微博:@hop_ping 个人主页 · 我的文章 · 17

相关文章

可能感兴趣的话题



直接登录
最新评论
  • 问题是如果使用es6的一些高级特性(yield, symbol…)的话生成出来的代码会超级大的,而且可读性很渣.

跳到底部
返回顶部