CoffeeScript 简介

简介

JavaScript也是一门经历了很多年的语言了,自从浏览器兴起,JavaScript就一直在被使用。但是,JavaScript有一些特性没有实现,为了让JavaScript更好用,CoffeeScript这个东西被发明出来。CoffeeScript可以看成是JavaScript的补丁版本,语法和JavaScript非常相似,但是增加了许多语法糖,CoffeeScript最后编译的结果也是JavaScript。另外CoffeeScript和JavaScript的互操作性也很好,它们两者编写的库之间可以无缝互相调用。

JavaScript的新标准ESMAScript 2015 添加了类、await/asyc等支持。相应地,CoffeeScript 2 也添加这些特性的支持。不过需要注意,CoffeeScript 2和CoffeeScript 1 并不兼容,而且现在浏览器对ESMAScript 2015的支持还有限。所以在使用CoffeeScript 2的时候需要注意。

安装

安装CoffeeScript很简单,首先先安装NodeJS。然后用npm安装。

npm install --global coffee-script

安装完成之后,我们就可以使用coffee命令行了。直接运行该命令会进入交互操作终端,使用-c参数可以编译Coffee文件。详细命令行参数参考Usage

概览

以下就是CoffeeScript官网的示例代码,列出了的一些语法糖。我们可以看到CoffeeScript支持很多现代的语法糖,例如if表达式、lambda表达式、elvis运算符、数组理解等等。

我们还可以从中看到CoffeeScript的一些特点:不需要手动编写var,编译器会自动判断作用范围;不需要编写分号,代码作用域使用所进来判断;而且方法调用的括号也可以省略。还有其他一些特性,直接看官方文档吧。

# Assignment:
number   = 42
opposite = true

# Conditions:
number = -42 if opposite

# Functions:
square = (x) -> x * x

# Arrays:
list = [1, 2, 3, 4, 5]

# Objects:
math =
  root:   Math.sqrt
  square: square
  cube:   (x) -> x * square x

# Splats:
race = (winner, runners...) ->
  print winner, runners

# Existence:
alert "I knew it!" if elvis?

# Array comprehensions:
cubes = (math.cube num for num in list)

上面的代码会被编译为等价的JavaScript。可以看到,CoffeeScript确实比普通的JavaScript的表达能力更强,怪不得Atom编辑器主要就是使用CoffeeScript写的,如果完全使用JavaScript编写,代码量肯定会大不少。

var cubes, list, math, num, number, opposite, race, square;

number = 42;

opposite = true;

if (opposite) {
  number = -42;
}

square = function(x) {
  return x * x;
};

list = [1, 2, 3, 4, 5];

math = {
  root: Math.sqrt,
  square: square,
  cube: function(x) {
    return x * square(x);
  }
};

race = function(winner, ...runners) {
  return print(winner, runners);
};

if (typeof elvis !== "undefined" && elvis !== null) {
  alert("I knew it!");
}

cubes = (function() {
  var i, len, results;
  results = [];
  for (i = 0, len = list.length; i < len; i++) {
    num = list[i];
    results.push(math.cube(num));
  }
  return results;
})();

进一步学习

如果希望进一步学习CoffeeScript的话,直接看官方文档就好了。这个官方文档做得很不错,有很多交互式例子,编辑左边的Coffee代码,右边就会编译出JavaScript代码,还能在线运行,非常方便。

我倒是找到了一个CoffeeScript的中文网站,不过更新不够及时,网络访问好像也不太通畅。所以大家还是看原版吧。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏三木的博客

mysql数据库及django用户名启用中文的方法

mysql数据库启用中文 在mysql的配置文件/etc/my.cnf的[mysqld]下加入 character_set_server=utf8 Django...

3118
来自专栏王亚昌的专栏

路由查找算法优化心得

    项目代码中有一个基础类库,用于解析client到server的路由配置文件,同时管理长连接。路由配置文件格式大致如下所示:

1082
来自专栏Play & Scala 技术分享

Play Scala 2.5.x - Play Web开发基础

4268
来自专栏Java进阶

如何用zookeeper 实现分布式锁

31810
来自专栏技术随笔

[Linux] 解压zip文件中文乱码问题解决

3738
来自专栏云计算教程系列

使用GNU Screen管理持久终端会话

GNU Screen是一种与终端会话配合使用的工具,允许用户在断开连接后恢复会话。Screen可防止会话“超时”或断开SSH连接或本地终端仿真器。单个Scree...

1392
来自专栏python3

python3--基础综合练习题

允许用户最多尝试3次,3次都没猜对的话,就直接退出,如果猜对了,打印恭喜信息并退出

2733
来自专栏青玉伏案

设计模式(六):控制台中的“命令模式”(Command Pattern)

今天的博客中就来系统的整理一下“命令模式”。说到命令模式,我就想起了控制台(Console)中的命令。无论是Windows操作系统(cmd.exe)还是Linu...

2139
来自专栏LanceToBigData

JavaWeb(一)Servlet中乱码解决与转发和重定向的区别

前言   前面其实已经把Servlet中所有的内容都介绍完了,这篇讲补充一点乱码和重定向与转发之间的区别! 一、request请求参数出现乱码问题 1.1、ge...

31210
来自专栏小程序·云开发专栏

云函数之间互相调用实现邮件发送

很多时候,我们会面临在小程序的后台实现多重功能,比如用户管理、日志分析、数据排序等,不同的功能之间还会相互调用。如果把这些功能都写到一个云函数里,会造成云函数逻...

7.6K2

扫码关注云+社区

领取腾讯云代金券