介绍

coffeeScript是一种轻量级的编程语言,可以用编译器生成原生javascript代码。它简化了许多javascript繁琐的方式,可以让你用简单的方式直接使用一行程序代表javascript多行代码,而且编译后还会根据最佳实践优化javascript代码。它的语法像是python和ruby的混合,不用括号控制排版,直接用缩进表示。建议初学者一边写coffeescript,一边对照生成的javascript代码,可以很快的了解coffeescript的意义。 浏览器最后执行的还是编译后的javascript代码。

语法

去掉多余的符号&&使用缩进

首先来看一个 coffeescript demo:

if elvis
alert "oh no"
elvis = 3

编译成 javascript 代码之后:

if (elvis){
alert("oh no");
elvis = 3;
}

看上面的coffee代码和js代码,js中的圆括号被去掉了,画括号也去掉了,分号;也去掉了。

再比如:

if elvis
alert "oh no"
elvis = 3

编译成 javascript 代码之后:

if (elvis){
alert("oh no");
}
elvis = 3;

最后一句代码缩进方式不同,导致最终编译的js也不一样,coffee就是根据tab缩进来进行排版的。

函数

声明函数时coffee默认会把最后一行作为函数的返回值,可以不加return,如果返回值为空,可以加上return。

例如:

fill = (x) ->
x * x

编译后的js为:

var fill;
fill = function(x){
return x * x;
}

字符串占位符

这是coffe中最爱的一点,因为javascript中没有类似c#中的string.Format()方法,拼接很长的字符串时代码看起来可读性很差。

# 这是cofee的注释
eat = (x) -> alert "I eat #{x}!"
eat food for food in ['toast', 'cheese', 'wine']

编译后的js代码:

var eat, food, _i, _len, _ref;

eat = function(x) {
return alert("I eat " + x + "!");
}; _ref = ['toast', 'cheese', 'wine'];
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
food = _ref[_i];
eat(food);
}

这里可以看出来使用coffee有多省事了吧。

区间使用

coffee有一个像java一样的...的语法:

# ... 表示区间
numbers = [0,1,2,3,4,5,6,7,8,9]
copy = numbers[0...numbers.length]
middle = numbers[3...6]

关于 == 和 != 之间的比较

在coffee中没有==,一律使用===,所以也就没有!=,只有!==。javascript中==和===的区别是:

三等操作符===用来判断两个变量是否相等,相等的前提是同样的类型和同样的值。

具体请参考我的另一篇文章。

对象判空

coffee可以使用?来判断参数是否已定义或是null值,例如:

if elvis?
alert "oh no"
elvis = 3

编译后的js代码:

var elvis;

if (typeof elvis !== "undefined" && elvis !== null) {
alert("oh no");
elvis = 3;
}

CoffeeScript简介 <一>的更多相关文章

  1. CoffeeScript简介 <二>

    集合与迭代 .. 与 ... 先看例子: arr = ["a1", "a2", "a3", "a4", "a5 ...

  2. {Django基础七之Ajax} 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解)

    Django基础七之Ajax 本节目录 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解) 一 Ajax简介 ...

  3. Windbg 脚本命令简介 二, Windbg command

    Windbg  脚本命令简介 二, Windbg  script command $<, $><, $$<, $$><, $$>a< (Run Scri ...

  4. {Django基础七之Ajax} 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解)

    {Django基础七之Ajax} 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解)   Django基础七之 ...

  5. WPF Binding值转换器ValueConverter使用简介(二)-IMultiValueConverter

    注: 需要继承IMultiValueConverter接口,接口使用和IValueConverter逻辑相同. 一.MultiBinding+Converter 多值绑定及多值转换实例 当纵向流量大于 ...

  6. Hibernate框架简介(二)基本使用增、删、改、查

    一.Hibernate框架简介 Hibernate是一个优秀的Java持久化层解决方案,是当今主流的对象-关系映射(ORM,ObjectRelationalMapping)工具 1.1.理解持久化 瞬 ...

  7. Selenium简介(二)--基于CORE/IDE的简单应用

    参考  http://blog.csdn.net/iamqa/article/details/4398240 Selenium简介(一)--总体介绍  http://blog.csdn.net/iam ...

  8. Redis简介二

    一.直接安装     1.Windows版本的Redis下载地址:https://github.com/dmajkic/redis/downloads  ,选择一个你想要下载的版本下载即可~     ...

  9. RSA简介(二)——模幂算法

    RSA最终加密.解密都要用到模乘的幂运算,简称模幂运算. 回忆一下RSA,从明文A到B B=Ae1%N 对B解密,就是 A=Be2%N 其中,一般来说,加密公钥中的e1一般会比较小,取65537居多, ...

  10. SystemVerilog语言简介(二)

    6. 用户定义的类型 Verilog不允许用户定义新的数据类型.SystemVerilog通过使用typedef提供了一种方法来定义新的数据类型,这一点与C语言类似.用户定义的类型可以与其它数据类型一 ...

随机推荐

  1. ActiveMQ、RabbitMQ、RocketMQ、Kafka有什么优点和缺点

    ActiveMQ 单机吞吐量:万级 topic数量都吞吐量的影响: 时效性:ms级 可用性:高,基于主从架构实现高可用性 消息可靠性:有较低的概率丢失数据 功能支持:MQ领域的功能极其完备 总结: 非 ...

  2. Android开发之实现多次点击事件

    在Android中给我们提供了单次点击事件.但并没有给我们提供双击,或者实现在一定时间内的多次事件.所以需要我们自己在单机监听上进行修改实现. 有如下两种实现方式: 1.定义一个存贮上一个第一次点击的 ...

  3. POJ 3421 X-factor Chains (因式分解+排列组合)

    题意:一条整数链,要求相邻两数前一个整除后一个.给出链尾的数,求链的最大长度以及满足最大长度的不同链的数量. 类型:因式分解+排列组合 算法:因式分解的素因子个数即为链长,链中后一个数等于前一个数乘以 ...

  4. #5【BZOJ4275】[ONTAK2015]Badania

    Description 给定三个数字串A,B,C,请找到一个A,B的最长公共子序列,满足C是该子序列的子串. Input 第一行包含一个正整数n(1<=n<=3000),表示A串的长度. ...

  5. URAL - 1078 Segments

    URAL - 1078 题目大意:有n条线段,一个线段a 完全覆盖另一个线段b 当且仅当,a.l < b.l && a.r>b.r.问你 一个线段覆盖一个线段再覆盖一个线段 ...

  6. 【Java】 剑指offer(15) 数值的整数次方

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 实现函数double Power(double base, int ...

  7. java构造代码块与静态代码块

    一:构造代码块 1.概述 作用:给对象初始化. 优先级:优先于对象的构造函数之前执行. { /*构造代码块的代码*/ } 给所有的对象统一的初始化,而构造函数只是给特定的对象初始化,因为构造函数可以重 ...

  8. Python 中常见错误总结

    IndentationError: unexpected indent Python 中强制缩进,, IndentationError: unexpected indent 缩进错误 这类错误非常常见 ...

  9. python tkinter-菜单栏

      菜单栏 Menu f = tkinter.Menu(root) root['menu']=f f.add_command(label='菜单')# f.add_command(label='关于' ...

  10. 宇宙最强VisualStudio2017配置pyQt5用于python3.6的UI界面工具(转)

    宇宙最强VisualStudio2017配置pyQt5用于python3.6的UI界面工具 转载: https://blog.csdn.net/m0_37606112/article/details/ ...