CoffeeScirpt是什么?

  1. CoffeeScript是一门小巧的语言脚本语言,会编译为JavaScript,并且CoffeeScript产生的JavaScript是可以通过JavaScript Lint检测的,它的语法风格受到了Ruby和Python影响,很多特性都借鉴于这两种语言。

  2. CoffeeScript是JavaScript的子集,即众所周知的精华部分

  3. JavaScript有很多不为人知的秘密,这些秘密往往让无经验的开发者摔跤。CoffeeScript有原则地选择了一些JavaScript的特性,巧妙地避开了这些不足,解决了该语言的怪癖。

  4. 由于处理运行时错误需要JavaScript相关的知识,要写CoffeeScript还是得了解JavaScript

  5. 从经验值来看,比起纯JavaScript的话,它能减少三分之一甚至一半的代码量。还有,CoffeeScript开有一些优雅的特性,比方说列表解析、原型符号别名和类等等,能够有效的减少需要你的输入。下面左边是 CoffeeScript, 右边是编译后输出的 JavaScript.

主要特性

  1. CoffeeScript去掉了分号,它会在编译时为你自动添加

  2. CoffeeScript修复了JavaScript中一个最让人头疼的全局变量问题

  3. 函数的最后一个表达式会作为隐式的返回值。换句话说,你不再需要使用return关键字,除非你想早一点从函数中返回

  4. 支持可变参数默认参数

            times = (a = 1, b = 2) -> a * b
    
            sum = (nums...) ->
    result = 0
    nums.forEach (n) -> result += n
    result
  5. 像Ruby一样,方法调用时括号也是可以省略的,但是仅限于函数被至少一个参数时,CoffeeScript会自动的调用这个函数

        alert "Hello world"
  6. 流程控制方面的语法糖

        if true != true then "Oh no!!"
    alert "It's cold!" if heat < 5
    unless true
    "Panic"
    if true isnt true
    alert "Opposite day!"
  7. 循环和列表解析

        for name in ["Roger", "Roderick", "Brian"]
    alert "Release #{name}" prisoners = ["Roger", "Roderick", "Brian"]
    release prisoner for prisoner in prisoners when prisoner[0] is "R"
  8. 引入区间的概念

        firstTwo = ["one", "two", "three"][0..1]
    my = "my string"[0..2]
  9. 让面向对象容易



  10. 字面量

    # Without braces
    object2 = one: 1, two: 2
    # Using new lines instead of commas
    object3 =
    one: 1
    two: 2 bitlist = [
    1, 0, 1
    0, 0, 1
    1, 1, 0
    ] OPERATOR = /// ^ (
    ?: [-=]> # 函数
    | [-+*/%<>&|^!?=]= # 复合赋值 / 比较
    | >>>=? # 补 0 右移
    | ([-+:])\1 # 双写
    | ([&|<>])\2=? # 逻辑 / 移位
    | \?\. # soak 访问
    | \.{2,3} # 范围或者 splat
    ) /// html = """
    <strong>
    cup of coffeescript
    </strong>
    """
  11. 存在性探测运算符

    solipsism = true if mind? and not world?
    
    speed = 0
    speed ?= 15 footprints = yeti ? "bear" zip = lottery.drawWinner?().address?.zipcode
  12. 运算符/比较符号

    CoffeeScript会把==操作符转化为===,把!=转化为!==。这是这门语言中我最喜欢的一个特性,也是最简单的一个

Coffeescript惯用法

  1. Each

       // ECMAScript5 的JavaScript新特性
    array.forEach(function(item, i){
    myFunction(item)
    });
    # coffee
    myFunction(item) for item in array
  2. Map

       // ECMAScript5 的JavaScript新特性
    var result = array.map(function(item, i){
    return item.name;
    });
    # coffee
    result = (item.name for item in array)
  3. 筛选

       // ECMAScript5 的JavaScript新特性
    result = array.filter(function(item, i){
    return item.name == "test"
    });
    #coffee
    result = (item for item in array when item.name is "test")
  4. And/or

    CoffeeScript编程风格推荐使用or代替||,使用and代替&&。因为前者看起来更直观。不过,这两种编程风格产生的结果都一样。

  5. is/isnt

    偏爱英语风格的代码的话,也可以使用is代替==,isnt代替!=。

       string = "migrating coconuts"
    string == string # true
    string is string # true
  6. 解构赋值

     theBait   = 1000
    theSwitch = 0 [theBait, theSwitch] = [theSwitch, theBait]
    // ---------------------
    futurists =
    sculptor: "Umberto Boccioni"
    painter: "Vladimir Burliuk"
    poet:
    name: "F.T. Marinetti"
    address: [
    "Via Roma 42R"
    "Bellagio, Italy 22021"
    ] {poet: {name, address: [street, city]}} = futurists
    // ---------------------
    text = "Every literary critic believes he will outwit history and have the last word" [first, ..., last] = text.split " " // ---------------------
    class Person
    constructor: (options) ->
    {@name, @age, @height} = options tim = new Person age: 4

偏爱英语风格的代码的话,也可以使用is代替==,isnt代替!=。

Debug支持

Google chrome 已经率先支持coffeescript的debug。

相关杂项

  1. TypeScript

  2. Dart

  3. Move

  4. LiveScript

参考资料

  1. CoffeeScript中文手册

  2. CoffeeScript中文

  3. CoffeeScript小书

  4. TodoMVC

  5. 利用CoffeeScript创建一个类似于iOS的主屏幕

  6. Javascript Garden

    Javascript 秘密花园

  7. JavaScript: The Good Parts

  8. JavaScript Lint

是时候用Coffeescript了的更多相关文章

  1. emmet,jade,haml, slim,less,sass,coffeescript等的实战优缺点

    摘要: 文章背景,来自于群内周五晚上的一次头脑风暴式的思维碰撞交流活动. 随着前端技术的蓬勃发展, 各种新技术随着生产力的需要不断的涌入我们的视野, 那今天探讨的话题是这些新时代的前端兵器谱: 一. ...

  2. CSS3与页面布局学习总结(七)——前端预处理技术(Less、Sass、CoffeeScript、TypeScript)

    CSS不像其它高级语言一样支持算术运算.变量.流程控制与面向对象特性,所以CSS样式较多时会引起一些问题,如修改复杂,冗余,某些别的语言很简单的功能实现不了等.而javascript则是一种半面向对象 ...

  3. Coffeescript实现canvas时钟

    前言 参照Mozilla 官方教程,要在Canvas上画动画时钟,思路非常有意思. 把动画看作是多个帧组成,定时每个时间点在Canvas上画一帧来实现动画.而Mozilla 官方教程画图实现的思路有意 ...

  4. CoffeeScript实现Python装潢器

    在上篇Angular遇上CoffeeScript – NgComponent封装中,我们讲述了CoffeeScript这门小巧的语言,摒弃JavaScript中糟粕(“坑”)部分,并将JavaScri ...

  5. Angular遇上CoffeeScript - NgComponent封装

    CoffeeScript是基于JavaScript的一门扩展小巧语言,它需要编译成JavaScript,然后再运行与浏览器或者Nodejs平台.JavaScript由于商业原因10天时间就匆忙诞生,所 ...

  6. CSS3与页面布局学习笔记(七)——前端预处理技术(Less、Sass、CoffeeScript、TypeScript)

    CSS不像其它高级语言一样支持算术运算.变量.流程控制与面向对象特性,所以CSS样式较多时会引起一些问题,如修改复杂,冗余,某些别的语言很简单的功能实现不了等.而javascript则是一种半面向对象 ...

  7. coffeeScript中类的多态[学习篇]

    类的一大应用就是多态.多态是一个面向对象编程的高级术语----“一个东西可编程很多不同的东西,但不是任何东西”.[引自coffeescript深入浅出] class Shape constructor ...

  8. coffeeScript中类的继承[学习篇]

    只是在看深入浅出coffeescript中感觉真的很好,不光是coffe写法简单,生成的js也值得学习,废话不多说了,直接抄个书上的例子 class Pet constructor: -> @i ...

  9. 《CoffeeScript应用开发》学习:第五章 CoffeeScript中的类

    在CoffeeScript中定义类 在CoffeeScript中,使用class定义类,使用关键字new实例化对象. 给类绑定方法 class Airplane takeOff: -> cons ...

  10. 《CoffeeScript应用开发》学习:第三章-构建简单的应用程序

    字符串插值 CoffeeScript提供了一种更好的构建字符串的解决方案.在双引号字符串(单引号无效)中使用#{}包含一个动态的值. str = 'Hello, CoffeeScript.' cons ...

随机推荐

  1. SAP成都研究院Sunshine: 我的C4C实习感受和保研之路

    今天的文章来自SAP成都一位实习生,曾经和Jerry同在C4C成都开发团队一起工作过.在Sunshine最后一个工作日里,Jerry和Sunshine一起吃饭的时候,她曾经聊到接下来的保研打算和将来工 ...

  2. 罗技G502设置

    这个鼠标默认内置了3个档案模式,用G9键来调节. p2 蓝色 1个灯 p2 蓝色 2个灯 p3 蓝色 3个灯 如此循环设置

  3. yum 源搭建

    RHEL系统部署网络yum源 配置网络yum源 RHEL系统本身光盘做成的yum源所提供的软件包有限,在实际使用过程中经常会出现缺包的现象,本文中以CentOS源作为替代,CentOS的软件包和RHE ...

  4. 【BZOJ1453】[WC] Dface双面棋盘(LCT维护联通块个数)

    点此看题面 大致题意: 给你一个\(n*n\)的黑白棋盘,每次将一个格子翻转,分别求黑色连通块和白色连通块的个数. \(LCT\)动态维护图连通性 关于这一部分内容,可以参考这道例题:[BZOJ402 ...

  5. 【BZOJ4025】二分图(LCT动态维护图连通性)

    点此看题面 大致题意: 给你一张图以及每条边的出现时间和消失时间,让你求每个时间段这张图是否是二分图. 二分图性质 二分图有一个比较简单的性质,即二分图中不存在奇环. 于是题目就变成了:让你求每个时间 ...

  6. 【转】VMware虚拟机系统无法上网怎么办?

    有很多用户通过安装VMware软件来创建虚拟机系统,其中就有部分用户在创建好虚拟机系统后遇到无法上网的问题,下面PC6苹果网小编就给大家带来VMware虚拟机系统下无法上网的解决办法: 1.在虚拟机右 ...

  7. ssd论文解读

    https://www.sohu.com/a/168738025_717210 https://www.cnblogs.com/lillylin/p/6207292.html https://blog ...

  8. 预处理-04-#if defined和#if !defined

    因为对于一个大程序而言,我们可能要定义很多常量( 不管是放在源文件还是头文件 ),那么我们有时考虑定义某个常量时,我们就必须返回检查原来此常量是否定义,但这样做很麻烦. if defined 宏正是为 ...

  9. Thinkphp 5 使用DOMDocument

    每一个载入浏览器都会生成一个 Document 对象. Document 对象使我们可以从脚本中对 HTML 页面中的所有元素进行访问.Document 对象是 Window 对象的一部分. 我们项目 ...

  10. CSS font-size字体大小样式属性

    设置字体大小CSS单词与语法 基本语法结构: .divcss5{font-size:12px;}设置了文字大小为12px像素Font-size+字体大小数值+单位 单词:font-size语法:fon ...