借助CoffeeScript或TypeScript之类的编译器写JavaScript代码的理由。静态编译、强类型语言和框架,我有着这些流行的、丰富的背景。我的上一份工作就是使用TypeScript,因为我不得不使用。那是一段不快乐的时光,我将因此而离开

我很幸运地把自己从这种困境和负担中释放出来,正在完全地使用JavaScript编写代码,我对此感到格外高兴!如果我对于这种变化的热情还不够明显,请让我向你保证,我现在更开心了。有一点很重要,我不是在暗示静态编译或强类型语言有什么错误,因为它肯定没错。它只不过不再是我的菜了。

  鉴于JavaScript的动态本性以及缺乏静态类型检查,我可能编写着低质量代码,充斥着bug却不能在编译时发现,对吗?答案是毫不含糊的,不对!我从来不能这样有动力、多产、富有表现和高效。我没有编写过最少bug的高质量代码,也不能在发现bug后快速修复。或许你想知道,我是否在编写风格统一的JavaScript,它们遵循最佳实践和风格,却没有编译器?答案是,对的!我不是故意在这里鼓吹自己,而是要指出,静态编译的缺乏不一定会导致更多的bug和低质量的代码。

  的确,有很多方法来确保JavaScript代码被正确地编写、遵循推荐的风格和最佳实践。更不要说编写高质量JavaScript成为了第二天性,自然地,你倾向于遵循你学到的、同样优秀的模式。你还应该总是编写合适的单元测试,这是一种最佳实践和另一种应对bug的防御,有助于确保预期的功能。我们不要忘了,合适的代码审核也是一种最佳实践,应该去用。

  那么,为什么要用这些编译器,好处又是什么呢?答案是,我也不知道。是不是应该有可以编译成Ruby和Python的RubyScript和PythonScript呢?在我看来,如果你不喜欢、或者不想编写JavaScript代码,那么你可能就不应该做一名JavaScript开发人员。它是古怪的、不完美的语言?它绝对是,但是它一直在变得更好。大部分的怪癖和遗漏在ECMAScript Harmony【注1】中提出了,比如:ES.next。

  我认为使用某种编译器只有一个原因,那就是,如果你是高级专家、JavaScript大拿,不喜欢原生JavaScript,只是想简单快捷地做些东西。如果你不是刚才提到的专家,那么我真地相信你只是在伤害自己而逃避原生JavaScript。你干嘛这么问?答案是,JavaScript正变得无处不在,成为庄重的、令人惊叹的语言。它已经融入了所有的web和移动环境、使用Node.js的服务器,还有数据库(比如MongoDB),甚至最近的硬件级别的处理(比如arduino)。

  我读了很多博客、newsletter、书、文章、论文、文档、MDN等与JavaScript相关的东西。它们都包含了用原生JavaScript编写的代码,我很少看到作者用CoffeeScript或类似语言呈现的代码,在极少场合碰到这些代码时,我会立即停止阅读,因为我只对JavaScript、而不是它的其它版本感兴趣。

  如果你曾经计划、或者有兴趣在工作中用到基于JavaScript的数据库(比如MongoDB),那么你需要知道如何编写JavaScript。你不能用CoffeeScript来查询MongoDB,也不能没有预编译就用CoffeeScript为Node.js编写基于服务器端的JavaScript,即使你有能力,也不能这样做。

  在GitHub上,如潮水般涌来的、表面上有数百万种的JavaScript资源库和框架,该怎么样呢?大型的有jQuery、AngularJS、Underscore等等。我强烈推荐深入学习JavaScript,这样你不仅能够阅读和理解源代码,还可以调试它。是的,说到了调试,不管是你是在浏览器,还是使用Webstorm为Node.js调试JavaScript,都会涉及到原生JavaScript。

  我最后想指出的是与其他人的协作(比如GitHub),或者找一份JavaScript工作室的工作。如果顺利的话,掌握原生JavaScript的好处应该比较明显。当你入职第一天走进严肃的JavaScript工作室、提出CoffeeScript编译器的问题,你能够想象得到这是什么情景吗?

  重申,如果你是高级专家JavaScript大拿,那么编译器可能就是好的吗?尽管如此,我怀疑你会不会成为这样的大拿,如果你因为青睐某种编译器而避免学习、编写原生JavaScript的话。如果你担心静态检查和风格,可以尝试一些构建工具(比如,Grunt、Gulp、Node、NPM等)。很多插件运行非常不错。对于既定代码,使用CoffeeScript或TypeScript是为了查看编译好的JavaScript,然后模拟原生代码的输出。无论怎样,帮自己一个忙,优先掌握JavaScript。

  注1:ECMAScript Harmony将会以“ECMAScript 6”发布。http://zh.wikipedia.org/wiki/ECMAScript

  原文:http://innoarchitech.com/coffeescript-typescript-javascript/

CoffeeScript、TypeScript 、 JavaScript 之间相关推荐

  1. Typescript和Javascript之间的区别

    目录 一.概要介绍 1.JavaScript 2.TypeScript 二.JavaScript 和 TypeScript 的主要差异 三.TypeScript 的优势 1. 静态输入 2. 大型的开 ...

  2. 通过构建城市来解释HTML,CSS和JavaScript之间的关系

    by Kevin Kononenko 凯文·科诺年科(Kevin Kononenko) 通过构建城市来解释HTML,CSS和JavaScript之间的关系 (The relationship betw ...

  3. html,css,javascript之间的关系是什么?各是负责哪方面工作的?

    html,css,javascript之间的关系是什么?各是负责哪方面工作的? html是xml的前身,你说的html是指单纯的静态页面,也就是写什么就是什么. css就是美化html,女人再漂亮也要 ...

  4. Python和JavaScript之间的JSON日期时间

    本文翻译自:JSON datetime between Python and JavaScript I want to send a datetime.datetime object in seria ...

  5. Java和JavaScript之间的区别

    1.简介 我们将在本文中比较Java语言和JavaScript语言. JavaScript由Netscape开发. 它最初是用于客户端的脚本语言,后来又用作客户端和服务器脚本的语言. Java由Jam ...

  6. 如何在TypeScript/JavaScript项目里引入MD5校验和

    摘要:MD5校验和则是其中一种数学算法,通常是使用工具对文件计算得出的一组32 个字符的十六进制字母和数字. 本文分享自华为云社区<TypeScript/JavaScript项目里如何做MD5校 ...

  7. [小笔记]TypeScript/JavaScript模拟Python中的Range函数

    [小笔记]TypeScript/JavaScript 模拟Python中的Range函数 李俊才/CSDN博客 CSDN用户名:jcLee95 邮箱:291148484@163.com 原创不易,感谢 ...

  8. [小笔记]TypeScript/JavaScript数组转置

    [小笔记]TypeScript/JavaScript数组转置 CSDN:jcLee95 邮箱:291148484@163.com 在代数中,矩阵一个是一个方形数组,它由若干个长度相等的子数组构成.所谓 ...

  9. [小笔记]TypeScript/JavaScript映射两组数据

    [小笔记]TypeScript/JavaScript映射两组数据 李俊才/CSDN博客 CSDN用户名:jcLee95 邮箱:291148484@163.com [需求]在Python3中有一个函数是 ...

  10. java和javascript区别_java和javascript之间有什么区别

    java和javascript之间有什么区别?本篇文章就给大家介绍java和javascript之间的区别,让大家了解java和javascript是什么?它们之间的差异有哪些.有一定的参考价值,有需 ...

最新文章

  1. 秋天六食物吃出好皮肤
  2. java.lang.arr_jxl操作java.lang.ArrayIndexOutOfBoundsException: 441 错误的解决
  3. 【Linux 内核】编译 Linux 内核 ⑤ ( 查看 .config 编译配置文件 | 正式编译内核 )
  4. .Net Core with 微服务 - Ocelot 网关
  5. matlab 空矩阵耗时,性能 – 更快的方式通过空矩阵乘法初始化数组? (Matlab)
  6. 什么叫做java程序中的继承_【Java】基础16:什么叫继承?
  7. 附录-SpringFactoriesLoader
  8. 名企笔试:京东 2016 算法工程师笔试题(登楼梯)
  9. 多个客户同时连接ServerSocket的简单实现
  10. mysql order 中文版,MySQL Order By排序结果
  11. c# 算式 计算器_C#计算器
  12. python 自动加载_【python】命令行下自动加载模块和tab补全功能
  13. 计算机文字录入在线打字,汉字输入方法-在线打字吧-在线拼音五笔打字练习软件,中文录入打字软件...
  14. 文件下载,搞懂这9种场景就够了
  15. STM32 阿里云MQTT esp8266 AT命令
  16. 七牛服务器提供的压缩图片的方法
  17. IntelliJ IDEA重置配置设定
  18. 神码ai人工智能写作机器人_机器学习简介part1与人工智能的比较
  19. Nginx编译安装及配置文件详解
  20. SetFocus()的用法

热门文章

  1. PHP疗法,人体穴位疗法的秘密-咔咔养生网
  2. python3内存分析_调试和分析 - tracemalloc —- 跟踪内存分配 - 《Python 3.7 标准库》 - 书栈网 · BookStack...
  3. 大数据电商数仓分析项目
  4. 《深度学习》李宏毅 -- task4深度学习介绍和反向传播机制
  5. 5.7(财务应用程序:计算将来的程序)
  6. 企业如何提升数据质量
  7. 如何保障大数据平台的安全性
  8. linux未找到make命令,linux中无make命令的问题(make: *** 没有指明目标并且找不到 makefile及make命令安装方法)...
  9. linux系统如何启用安全内核,安全 - Linux 内核引导选项简介
  10. 4.C++深入理解 面向对象部分3