16boke - 一路博客

coffeescript学习笔记二

一、coffeescript语法

1、写coffeescript文件里面必须完全是纯coffeescript代码,不能把javascript杂糅在一起

2、coffeescript没有分号

3、注释

    单行:# a comment

    多行:

        ###

            A multiline comment

        ###

4、coffeescript的空格是有意义的

5、coffeescript剔除了全局变量

6、coffeescript移除了冗长的function语句,以瘦箭头->替代,函数可以是一行也可以是多行。函数的最后一个表达式会作为隐式的返回值,

可以不需要使用return关键字,如果想早一点从函数中返回也可以使用return。

    func = -> "bar"    #无参

    times = (a,b) -> a*b    #有参

    times = (a=1,b=2) -> a*b    #参数有默认值

    #使用参数槽(splats)接收多个参数,使用...表示

    sum = (nums...) ->

        result =0

        nums.forEach(n) -> result +=n

        result

7、定义数组

数组可以使用换行来代替逗号,但是方括号不可少

array1=[1,2,3]

array2 = [

1

2

3

]

array3=[1,2,3,]    #coffeescript还可以去掉最后一个多余的逗号

8、流程控制

iftrue==true
"We're ok"
iftrue!=truethen"Panic"
# Equivalent to:
# (1 > 0) ? "Ok" : "Y2K!"
if1>0then"Ok"else"Y2K!"

注意:在单行的if语句中,需要使用then关键字

前缀表达式:alert "It's cold!" if heat<5

取反:

    使用感叹号(!): if true!=true then "Panic"

    使用not : if not true then "Panic"

    使用unless : unless true then "Panic"

is语句,可编译为===

    if true is 1 then "1"    #is转换为===

isnt代替is not                 #isnt转换为!==

    if true isnt true then "false"

多行字符串连接直接放在""中,不用在每行前加+

循环和列表解析

fornamein["Roger","Roderick","Brian"]
alert"Release #{name}"

forname,iin["Roger the pickpocket","Roderick the robber"]
alert"#{i} - Release #{name}"

数组

firstTwo=["one","two","three"][0..1] #区间会返回一个只包含原始数组前两个元素的新数组

my="my string"[0..2] #在字符串上使用区间来获得一个新的子字符串。

indexOf():

words=["rattled","roudy","rebbles","ranks"]
alert"Stop wagging me"if"ranks"inwords