当前访客身份:游客 [ 登录 | 加入开源中国 ]

问答

当前位置:
问答 » 技术问答 » CoffeeScript

开程序员的淘宝店!寻找开源技术服务伙伴!>>> »  

讨论一下 ES6 vs CoffeeScript vs TypeScript 哪个更好?国内好像讨论得不是很热烈,V2ex和知乎上只有寥寥数文。国外都炸开锅了,各大社区积极讨论。

真是不好抉择的问题,我个人很喜欢Coffee简洁的代码,也用Coffee写过一些项目,他的坑我也知道。但ES6已经得到普遍的认可,从浏览器厂商到node.js,未来肯定会替代目前的JS标准,而成为标准的JS语言规范。从这点上看,Coffee除非有厂商肯支持他,不然还是要做转换器,只是转换为ES6而已。

补充:增加TypeScript,看了一下,其实国外也有很多用户会推荐TypeScript,但我是不太喜欢TypeScript那种不统一的风格,如果是TypeScript和ES6比较,我肯定选择ES6。不过作为一种选择,还是一起讨论吧。

scala.js就不在讨论之列了,这货居心不良,且野心太大,但又和主流的js生态圈不太兼容(他要用他的SBT来编译)。还有php.js,ruby.js,go.js等等,就算了,当玩具看看就好。

Coffee最典型的代表就是github的atom编辑器,我已经用了一段时间了,不算很好用,但很实用吧,他就是用Coffee写的,但目前的趋势看,ES6后来局上了,很多模块已经改用ES6重写了。

atom的项目:https://github.com/atom/atom

下面是目前ES6的浏览器厂商支持情况:

https://kangax.github.io/compat-table/es6/

大家是怎么看呢?

---------------问题补充---------------

@曾建凯:修正一下帖子内容,Chrome 50+已经大批量支持ES6了。(9个月前)

曾建凯 曾建凯
发帖于 9个月前
4回/3885阅

按票数排序  显示最新回答   共有4个回答 (最后回答: 9个月前 )

    1
  • 曾建凯

    引用来自“frantic1048”的评论

    "未来肯定会替代目前的JS标准,而成为标准的JS语言规范" -- ES6 从去年开始就是现任的标准……JavaScript 是语言,ECMAScript 是一个描述了一个编程语言的标准,前者是后者的实现,现在说 ECMAScript 6 的时候一般是指 ECMAScript 6 这套标准对应的 JavaScript (比如在这个版本的 JavaScript 里面你能够写 Generator 了),ES6 并不是什么别的语言或者语言扩展,他就是 JavaScript 啊。所以大家才都去实现 ES6,而不是别的。

    以及今年夏天预定还会发布 ECMAScript 2016 (ECMAScript 7)呢,这个 ESx 的称呼当成 JS 的一个语言版本就好……

    分号的事情,LZ 随便上个完整的 linter 规则集(不要手写一两条 Linter 规则就开始用……至少也得基于一个完整的规则集进行自定义)就不会有这个问题了,比如 Standard Style,配备任意 Linter 可以让你不需要担心/思考这种问题……

    虽说为了在浏览器上跑 ES6 不得不动用 Babel/Webpack 这样的编译器/模块绑定器,或者整个模块加载器之类的略繁,不过也不差这点吧,没有 ES6/TypeScript/CoffeeScript 的时候不还有一堆什么 uglify/concatc/versioning……之类的事儿嘛,现在也就多个编译而已 (雾)

    诶,只写过 JS (Babel 的特性支持开到了 Stage 0 所以不能算 ES6 了 ~(>_<~)),读过一丁点 CoffeeScript ,Coffee 的感受的是没了括号感觉有点虚一不小心看串了就晕了 ~(>_<~),没有更深的体验了 orz,目前用着 JS 体验还是不错的 (っ˘ڡ˘ς)

    因为要回复的内容太多,我就引用你的内容重新写吧:

    回复 @frantic1048

    在js里面,我把一些功能集合写成原型链,可是视作为一个class,但之后如果需要重用,你就需要继承,继承有很多种,遍历复制原型链,new一个class,来利用原型链,或者对象冒充,等等。

    在细节上考虑,需要考虑

    1. 各种方式对原来的class的破坏,比如有时候需要保留constructor.name,有时候需要具名函数的机制等。

    2. 再细一点,就要考虑相关方式涉及的性能问题。

    嗯,我其实已经一直这样10多年了,如果一直只是我一个人倒是无所谓,但是我不可能永远只是一个人去写代码,奇淫巧技过多,并不利于团队规范的制定,以及项目代码的维护和管理。

    2010年的时候,我曾经遇到过一个技术很好,也兴趣相投的前端,我们动议自己写一套能兼容jQ、Mootools等前端框架的类库。他动手能力真强,倒是写出来的,但是做一个框架设计者,我看出他的架构上存在很大的问题,或者说,其实这本身就是javascript语言的一种局限性,并不是他的能力、或者它的思路的问题。

    说白了,如果做大型架构设计(上面说的这个框架,完整包含web开发所需的所有功能,合计超过万行代码的),基于ECMAScript5的特性,真的是乏善可陈。也是因为这样,才有了AMD/UMD/CommonJS/NPM等js package管理的问题。

    如果在编写代码层面,你需要注意的语言细节就太多,会让你离业务核心越来越远。

    --- 共有 1 条评论 ---
    • frantic1048 这种细节需求的确不好搞诶……有了模块系统与依赖管理是对重用这种需要带来了不小的帮助 ~(>_<~) (9个月前)   回复
    评论(1)| 引用此答案| 举报 (2016-05-01 19:49)
  • 0
  • frantic1048

    "未来肯定会替代目前的JS标准,而成为标准的JS语言规范" -- ES6 从去年开始就是现任的标准……JavaScript 是语言,ECMAScript 是一个描述了一个编程语言的标准,前者是后者的实现,现在说 ECMAScript 6 的时候一般是指 ECMAScript 6 这套标准对应的 JavaScript (比如在这个版本的 JavaScript 里面你能够写 Generator 了),ES6 并不是什么别的语言或者语言扩展,他就是 JavaScript 啊。所以大家才都去实现 ES6,而不是别的。

    以及今年夏天预定还会发布 ECMAScript 2016 (ECMAScript 7)呢,这个 ESx 的称呼当成 JS 的一个语言版本就好……

    分号的事情,LZ 随便上个完整的 linter 规则集(不要手写一两条 Linter 规则就开始用……至少也得基于一个完整的规则集进行自定义)就不会有这个问题了,比如 Standard Style,配备任意 Linter 可以让你不需要担心/思考这种问题……

    虽说为了在浏览器上跑 ES6 不得不动用 Babel/Webpack 这样的编译器/模块绑定器,或者整个模块加载器之类的略繁,不过也不差这点吧,没有 ES6/TypeScript/CoffeeScript 的时候不还有一堆什么 uglify/concatc/versioning……之类的事儿嘛,现在也就多个编译而已 (雾)

    诶,只写过 JS (Babel 的特性支持开到了 Stage 0 所以不能算 ES6 了 ~(>_<~)),读过一丁点 CoffeeScript ,Coffee 的感受的是没了括号感觉有点虚一不小心看串了就晕了 ~(>_<~),没有更深的体验了 orz,目前用着 JS 体验还是不错的 (っ˘ڡ˘ς)

    --- 共有 6 条评论 ---
    • frantic1048 回复 @曾建凯 : 为什么要去实现 class 机制呢 ~(>_<~)? (9个月前)   回复
    • frantic1048 回复 @曾建凯 : 这个玩法似乎更适合 codepen.io 那种写 demo 用诶,要是不需要及时接受用户输入的代码的话,我还是更喜欢 webpack + devServer 的方式,根据依赖关系自动注入 script 标签,自动的页面刷新,快速的增量编译 _(:з」∠)_ (9个月前)   回复
    • 曾建凯 我当然知道,其实我对本身原型链机制没有意见,只是每次都要自己写一些东西来实现class机制,就很痛苦了。尤其是写了10几年的我来说,真的很厌烦。 (9个月前)   回复
    • frantic1048 回复 @曾建凯 : JS 有自己的原型来实现 OO 的手段,class 只是另一种姿势,况且 ES6 引入的 class 背后也是原型,并不是 java 那种 class ( ⚆ _ ⚆ ) (9个月前)   回复
    • 曾建凯 其实我很看重的一点,首先是支持class,好像我写了那么多年js,真的很烦js要考各种奇淫巧技来实现。 (9个月前)   回复
    评论(6)| 引用此答案| 举报 (2016-05-01 16:59)
  • 0
  • wuyiw

    Chrome倒是一反常态

    啥是"反常态"...


    --- 共有 1 条评论 ---
    评论(1)| 引用此答案| 举报 (2016-05-01 11:37)
  • 0
  • 彭博
    正在使用 ES6 各种语法,然后用 Babel 转成 ES5,感觉良好。不喜欢 Coffee 的缩进方式以及各种看着像 “Magic” 一样的语法糖…
    --- 共有 6 条评论 ---
    • 彭博 感觉现在前端编译过程都不短了 (9个月前)   回复
    • 曾建凯 回复 @彭博 : 那如果很多很多js文件比如100个js文件,那你这个转换的过程还是很慢啊。 (9个月前)   回复
    • 彭博 加上 ESLint 检查,代码写完干干净净[13] (9个月前)   回复
    • 曾建凯 回复 @彭博 : js养成了习惯是强迫分号,哎 (9个月前)   回复
    • 彭博 其实大多数情况是不需要打分号的,有 ASI (9个月前)   回复
    评论(6)| 引用此答案| 举报| 来自 iPhone (2016-04-30 09:00)
最新热门职位
更多开发者职位上 开源中国·招聘


回答案顶部 | 回页面顶部