CoffeeScript
---->安装node.js
---->安装coffeeScript
语句:
注意:没有分号,语句由新的一行结束;多条语句写到同一行时需要分号表示一条语句的结束(不常用);
通过在行尾加上\表示语句延续到下一行;
变量:
和js不同,CoffeeScript的变量不需要定义,默认所有变量都是局部变量。
声明全局变量:global.myGlobalVariable="I am calamus!"
在浏览器中用window对象代替:window.myGlobalVariable="I am calamus!"
注释:
单行注释(编译后不存在):以#开头,行中间的# 之后的内容也是注释内容。
#注释内容;
多行注释(很少用,编译为js后为/**/):以###开头和结尾的注释块
###
注释块内容
###
函数调用:
函数调用的优先级:参数由内向外分配给函数,即最近原则。
console.log("Hello,Calamus!") console.log "Hello,Calamus!" //有参数则小括号可以省略,但有时需要实用小括号消除歧义 Math.pow 2,3 //调用没有参数的函数,必须实用括号 Date.now()
控制结构:不实用大括号,使用缩进控制代码执行
if、else 和 else if语句:
calamus=16; if calamus>5 console.log "Calamus is greater than 5" if calamus>15 console.log "Calamus is greater than 5" console.log "Over"
单行形式:
console.log "Success!" if true==true
unless语句(测试条件为等价假值时执行分支语句块):
day="Monday" unless day[0]=="S" console.log "Today is a weekday!" //编译后的js代码为: var day; day="Monday"; if(day[0]!=="S"){ console.log "Today is a weekday!" }
switch语句:
//编译为js会添加break switch things when "ice" console.log "white" when "grass" then console.log "green" //也可以实用then缩短语句到一行 else console.log "gray"
比较运算符:
CoffeeScript | JavaScript |
is,== | === |
isnt | !== |
not | ! |
and | && |
or | || |
true,yes,on | true |
false,no,off | false |
@,this | this |
of | in |
in |
数组:
languages =["english","chinese","french"] languages =[ "english", "chinese", "french"] //不实用逗号也可以 languages =[ "english" "chinese" "french"]
数列:
num=[0..9] //编译为num=[0,1,2,3,4,5,6,7,8,9]; num=[0...9] //编译为num=[0,1,2,3,4,5,6,7,8];三个点不包含尾边界
简单对象:
author={name:"Calamus",age:21} //可以省略逗号,大括号(缩进) author.name author["age"] author.favoriteColor="black" //对象的遍历 for k,v of author consoloe.log "My"+k+"is"+v
循环:
//遍历数组每个元素很方便 animals=["dog","cat","brid"] for animal in animals console.log animal
函数:
匿名函数:
//参数为name的匿名函数,也可以有多个参数的 (name) -> return "Hello,#{name}!" //编译后 (function(name){ return "Hello,"+name+"!"; }) //函数的调用 sayHello=(name) -> return "Hello,#{name}!" sayHello "Calamus"
命名函数:大多数情况下不支持命名函数,主要原因是IE对命名函数的支持非常弱,但可以实用绑定带变量的方式给函数命名
函数的返回值
//如果函数没有显式的返回值,会把最后一句话当作函数的返回值 about = (phrase) -> "{phrase.toUpperCase()}!!!" //return 确定没有返回值时加return //null 隐式返回 //编译后的js var shout; shout = function (phrase){ return ""+(phrase.toUpperCase())+"!!!"; }
类:
//声明一个类 class rabbit //创建类的实例 rabbit=new rabbit() rabbit.color="gray" //给类绑定方法,number为参数 class rabbit jump:(number)-> console.log "GrayRabbit" rabbit.jump()
构造函数:
//只需在前面加constructor class rabbit constructor:(num,type="diesel") -> @type=type; @number=number @load=0 @capacity=number * 100 describe : -> //其他内容
类的继承:
//实用extends表明继承关系 class animal behavior : -> console.log "jump" class rabbit extends animal //实例 myRabbit = new rabbit() myRabbit.behavior()
本文首发于Calamus的博客。