coffeescript是javascript的预编译器,coffeescript是javascript上面的一层,必须通过编译输出成javascript。
coffeescript有如下优点:
避免常见的语法错误
给编程语言加入一些非原生的功能
改进代码语法与可读性
利用预编译器中包含的最优代码编写方法
相比之下javascript具有如下相对的短板:
分号到处都是,忘记他们就会引入错误
必须一遍又一遍的声明function关键字
结尾的逗号会引入许多意想不到的问题
javascript中的变量作用域容易搞混
为了克服以上的短板,coffeescript引入了如下语法特点:
coffeescript不需要分号
不需要使用var声明变量,由 ”=“ 指派
不需要function关键字,函数通过使用 “->”将参数指向结果来声明
不需要花括号,coffeescript中使用空格,通过缩进来推导出花括号,缩进的代码就等同于{}
不需要return 函数的最后一行自动返回
不需要括号来包裹参数,函数后面的任何东西都作为参数
例如:
cube=(x) -> x*x*x
上面的代码等同于:
function cube(x){
return x*x*x;
}
条件和比较:
coffeescript引入了许多的关键字来增强条件和比较,使得更容易阅读和理解代码,代码更简明,更容易维护
coffeescript javascript
is ===
isnt !==
not !
and &&
or ||
true,yes,on true
false,no,off false
@,this this
of in
in
coffeescript也增强了一些字符串的功能,从而使的字符串的处理更为简单
例如:
beer = "world"
sing="hello #{beer}"
coffeescript 也支持Heredocs风格的字符串声明
在javascript中:
var html="<p>\n my awesome html \n <\p>";
在coffeescript中可以这样:
html="""
<p>
my awesome html
</p>
"""
对象
coffeescript支持通过YAML风格的语法创建对象
在javascript中,对象的写法如下:
var kids={
brother:{
name:"brother",
age:10
}
sister:{
name:"sister",
age:11
}
}
在coffeescript中,用如下的方式创建:
kids=
brother:
name:"brother"
age:10
sister:
name:"sister"
age:11
类,继承和super
javascript中原型继承让人痛苦,coffeescript提供一种更为友好的声明类的方式
声明一个类,使用如下的方法:
class Car
constructor: (@name)->
speed:100
coffeescript的继承同样很友好
class FaseCar extends Car
在继承的子类中我们可以使用super关键字
class Robot
run: ->
console.log("robot is running")
class SmartRobot extends Robot
run:->
console.log("I dont't like running")
super