是时候用Coffeescript了

CoffeeScirpt是什么?
CoffeeScript是一门小巧的语言脚本语言,会编译为
JavaScript,并且CoffeeScript产生的JavaScript是可以通过JavaScript Lint检测的,它的语法风格受到了Ruby和Python影响,很多特性都借鉴于这两种语言。CoffeeScript是JavaScript的子集,即众所周知的精华部分
JavaScript有很多不为人知的秘密,这些秘密往往让无经验的开发者摔跤。CoffeeScript有原则地选择了一些JavaScript的特性,巧妙地避开了这些不足,解决了该语言的怪癖。
由于处理运行时错误需要JavaScript相关的知识,要
写CoffeeScript还是得了解JavaScript从经验值来看,
比起纯JavaScript的话,它能减少三分之一甚至一半的代码量。还有,CoffeeScript开有一些优雅的特性,比方说列表解析、原型符号别名和类等等,能够有效的减少需要你的输入。下面左边是 CoffeeScript, 右边是编译后输出的 JavaScript.

主要特性
CoffeeScript去掉了分号,它会在编译时为你自动添加
CoffeeScript修复了JavaScript中一个最让人头疼的全局变量问题
函数的最后一个表达式会作为隐式的返回值。换句话说,你不再需要使用return关键字,除非你想早一点从函数中返回
支持
可变参数,默认参数times = (a = 1, b = 2) -> a * b sum = (nums...) ->
result = 0
nums.forEach (n) -> result += n
result
像Ruby一样,方法调用时括号也是可以省略的,但是仅限于函数被
至少一个参数时,CoffeeScript会自动的调用这个函数alert "Hello world"
流程控制方面的语法糖
if true != true then "Oh no!!"
alert "It's cold!" if heat < 5
unless true
"Panic"
if true isnt true
alert "Opposite day!"
循环和列表解析
for name in ["Roger", "Roderick", "Brian"]
alert "Release #{name}" prisoners = ["Roger", "Roderick", "Brian"]
release prisoner for prisoner in prisoners when prisoner[0] is "R"
引入区间的概念
firstTwo = ["one", "two", "three"][0..1]
my = "my string"[0..2]
让面向对象容易


字面量
# 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>
"""
存在性探测运算符
solipsism = true if mind? and not world? speed = 0
speed ?= 15 footprints = yeti ? "bear" zip = lottery.drawWinner?().address?.zipcode
运算符/比较符号
CoffeeScript会把==操作符转化为===,把!=转化为!==。这是这门语言中我最喜欢的一个特性,也是最简单的一个

Coffeescript惯用法
Each
// ECMAScript5 的JavaScript新特性
array.forEach(function(item, i){
myFunction(item)
});
# coffee
myFunction(item) for item in array
Map
// ECMAScript5 的JavaScript新特性
var result = array.map(function(item, i){
return item.name;
});
# coffee
result = (item.name for item in array)
筛选
// ECMAScript5 的JavaScript新特性
result = array.filter(function(item, i){
return item.name == "test"
});
#coffee
result = (item for item in array when item.name is "test")
And/or
CoffeeScript编程风格推荐使用or代替||,使用and代替&&。因为前者看起来更直观。不过,这两种编程风格产生的结果都一样。is/isnt
偏爱英语风格的代码的话,也可以使用is代替==,isnt代替!=。string = "migrating coconuts"
string == string # true
string is string # true
解构赋值
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。
相关杂项
参考资料
Javascript Garden
Javascript 秘密花园

是时候用Coffeescript了的更多相关文章
- emmet,jade,haml, slim,less,sass,coffeescript等的实战优缺点
摘要: 文章背景,来自于群内周五晚上的一次头脑风暴式的思维碰撞交流活动. 随着前端技术的蓬勃发展, 各种新技术随着生产力的需要不断的涌入我们的视野, 那今天探讨的话题是这些新时代的前端兵器谱: 一. ...
- CSS3与页面布局学习总结(七)——前端预处理技术(Less、Sass、CoffeeScript、TypeScript)
CSS不像其它高级语言一样支持算术运算.变量.流程控制与面向对象特性,所以CSS样式较多时会引起一些问题,如修改复杂,冗余,某些别的语言很简单的功能实现不了等.而javascript则是一种半面向对象 ...
- Coffeescript实现canvas时钟
前言 参照Mozilla 官方教程,要在Canvas上画动画时钟,思路非常有意思. 把动画看作是多个帧组成,定时每个时间点在Canvas上画一帧来实现动画.而Mozilla 官方教程画图实现的思路有意 ...
- CoffeeScript实现Python装潢器
在上篇Angular遇上CoffeeScript – NgComponent封装中,我们讲述了CoffeeScript这门小巧的语言,摒弃JavaScript中糟粕(“坑”)部分,并将JavaScri ...
- Angular遇上CoffeeScript - NgComponent封装
CoffeeScript是基于JavaScript的一门扩展小巧语言,它需要编译成JavaScript,然后再运行与浏览器或者Nodejs平台.JavaScript由于商业原因10天时间就匆忙诞生,所 ...
- CSS3与页面布局学习笔记(七)——前端预处理技术(Less、Sass、CoffeeScript、TypeScript)
CSS不像其它高级语言一样支持算术运算.变量.流程控制与面向对象特性,所以CSS样式较多时会引起一些问题,如修改复杂,冗余,某些别的语言很简单的功能实现不了等.而javascript则是一种半面向对象 ...
- coffeeScript中类的多态[学习篇]
类的一大应用就是多态.多态是一个面向对象编程的高级术语----“一个东西可编程很多不同的东西,但不是任何东西”.[引自coffeescript深入浅出] class Shape constructor ...
- coffeeScript中类的继承[学习篇]
只是在看深入浅出coffeescript中感觉真的很好,不光是coffe写法简单,生成的js也值得学习,废话不多说了,直接抄个书上的例子 class Pet constructor: -> @i ...
- 《CoffeeScript应用开发》学习:第五章 CoffeeScript中的类
在CoffeeScript中定义类 在CoffeeScript中,使用class定义类,使用关键字new实例化对象. 给类绑定方法 class Airplane takeOff: -> cons ...
- 《CoffeeScript应用开发》学习:第三章-构建简单的应用程序
字符串插值 CoffeeScript提供了一种更好的构建字符串的解决方案.在双引号字符串(单引号无效)中使用#{}包含一个动态的值. str = 'Hello, CoffeeScript.' cons ...
随机推荐
- ASP.NET Core - 初期准备
微软在前不久发布了.NET Core1.0(以下简称Core),由于项目需要开始对其进行研究,希望将自己踩过的坑和见解分享给大家. Core和Framework4.6是属于并行产品,前者侧重于跨平台的 ...
- 洛谷 P2251 质量检测
题目背景 无 题目描述 为了检测生产流水线上总共N件产品的质量,我们首先给每一件产品打一个分数A表示其品质,然后统计前M件产品中质量最差的产品的分值Q[m] = min{A1, A2, ... Am} ...
- C#调用C++的dll存在的问题
C#调用C++写的DLL时,在C#程序中,使用DllImport定义C++导出函数的定义信息,之前在C++中定义导出函数时,使用了long作为参数类型,使用C#调用时,开始在64位版本是哪个测试,一切 ...
- 22 Swap Nodes in Pairs
Given a linked list, swap every two adjacent nodes and return its head. For example,Given 1->2-&g ...
- 初学React:组件的样式
React中组件的样式有三种: <!DOCTYPE html> <html lang="en"> <head> <meta charset ...
- Ubuntu 16.04 安装札记
写在前面的话:第一次写,有点紧张,不知道怎么写,就胡乱写了,主要是写给自己看的,感觉这里大神遍地都是,大牛更是数不胜数,我就一小白,记下来怕以后忘了,言归正传,我初步打算是把这篇博客写成安装指南(捂脸 ...
- 转:SSM框架——使用MyBatis Generator自动创建代码
转:https://blog.csdn.net/zhshulin/article/details/23912615 这两天需要用到MyBatis的代码自动生成的功能,由于MyBatis属于一种半自动的 ...
- cudpp库的编译和使用
项目主页 http://cudpp.github.io/ 根据这个网址的提示进行 https://github.com/cudpp/cudpp/wiki/BuildingCUDPPwithCMake ...
- innerHTML动态添加标签的注意事项
在使用javascript动态添加页面上元素时,我们经常会使用DOM去逐个地将节点添加到文档碎片中,再将整个文档节点添加到DOM树中.其实还有一种方法动态添加元素:innerHTML. 我最近要将一大 ...
- React后台管理系统-添加商品组件
引入了CategorySelector 二级联动组件.FileUploader图片上传组件和RichEditor富文本编辑组件 import React from 'react'; import MU ...






