《CoffeeScript應用開發》學習:第二章 編寫第一個CoffeeScript應用程序

CoffeeScript基礎

語句

CoffeeScript沒有分號,語句由新的一行結束,可是可使用\將語句延續至下一行。javascript

有時能夠跨行實現函數調用:java

"foo".
    .concat("barbaz")
    .replace("foobar", "fubar")

也能夠把幾條語句寫在同一行,使用分號分隔。node

變量

CoffeeScript變量不須要定義,且默認都是局部變量。如:數組

x = 1
y = 2

被編譯爲:瀏覽器

var x,y;
x = 1;
y = 2;

若是確實想使用全局變量,那麼在node或者coffee控制檯中,將變量綁定到global,在瀏覽器中,將變量綁定到window。app

註釋

使用#開始的都是註釋,僅能在一行中。使用###表示的註釋可以跨行。less

函數調用

相似於JavaScript的函數調用:函數

console.log("hello planet")

另外一種函數調用:測試

console.log "Hello planet." #單參數
Math.pow 2, 3   #多參數

可是若是調用的函數沒有參數,必須使用小括號。如:this

Date.now()

由於在沒有參數的時候,若是不加括號的話是訪問函數對象仍是執行函數並不清楚,使用小括號能夠區分二者。不偏離JavaScript語言的基本原理,是CoffeeScript哲學的一部分。

優先權

函數調用優先級原則:參數由內向外分配給函數,即參數所屬的函數遵循最近原則。例:

# 如下兩種調用等價
Math.max 2, 3, Math.min 4, 5, 6
Math.max 2, 3, Math.min(4, 5, 6)

控制結構

CoffeeScript中的控制結構和JavaScript基本一致。

CoffeeScript的多行模式:在控制檯按Ctrl+V,而後就能夠輸入多行代碼,最後按Ctrl+V退出多行模式並執行輸入的多行代碼

if語句

標準if語句的寫法:

if(true == true)
    console.log "Test"

去除括號版:

if true == true
    console.log "Test"

同時,CoffeeScript在全部控制結構(如if語句,循環或者函數)中都不使用大括號,而是使用縮進來控制代碼執行

else和else if語句

用法相似於JavaScript。例:

number = -8
if number > 0
    "Positive"
else if number < 0
    "Negative"
else
    "Zero"

unless語句

unless當測試條件爲假值的時候執行分支語句塊。與if相反。例:

day = "Monday"
unless day[0] == "S"
    console.log "This is a weekday."

unless語句也能夠與else,else if語句一塊兒使用

單行形式

if語句能夠寫成單行形式,例:

console.log "Test" if true == true

unless語句也支持這種寫法。

比較運算符

在CoffeeScript中,==被編譯爲===!=被編譯爲!==

CoffeeScript提供了一些別名用法加強代碼的可讀性,
|CoffeeScript|JavaScript|
|------------|----------|
|is|===|
|isnt|!==|
|not|!|
|and|&&|
|or||||
|true,yes,on|true|
|false,on ,off|false|
|@,this|this|
|of|in|
|in|無對應js|

數組

數組聲明使用和JavaScript中一致

若是每一個數組成員單獨在一行聲明,則可省略逗號

languages = [
    "english"
    "french"
    "chinese"
]

數列

可使用數列建立連續數字組成的數組。其中兩個..表明包含尾邊界,三個...表明不包含尾邊界。除了使用數字常量,也可使用變量來建立。

arr = [0..3] # 等價於 arr = [0,1,2,3]
arr2 = [3..0] # 等價於 arr2 = [3,2,1,0]
arr3 = [0...3] # 等價於 arr3 = [0,1,2]

start = 0
end = 3
arr4 = [start..end] # 等價於arr4 = [0,1,2,3]

數列的實現原理:
javascript var end, start, _i, _results; start = 0; end = 100; numbers = (function(){ _results = []; for(var _i = start; start <= end ? _i <= end : _i >= end; start <= end ? _i++ : _i--) {_results.push(i);} return _results; }).apply(this)

循環

CoffeeScript中的for in循環和JavaScript中的不一樣。迭代參數爲數組元素,不是索引,不過須要使用索引的話,可聲明for循環的第二個循環參數,即爲索引。同時,還能夠與when語句一塊兒使用,起到進一步過濾的做用。例:

animals = ['dog','cat','bird']

# 使用帶索引的for..in語句
for animal, index in animals
    console.log index + ':' + animal

# 使用when語句
for animal in animals when animal == 'cat'
    console.log 'This is a cat'

與JavaScript不一樣的是,CoffeeScript數組for in循環有返回值,返回值爲每次迭代的執行結果的數組。

pluralAnimals = for animal in animals
    animal + 's'

# pluralAnimals爲[ 'dogs', 'cats', 'birds' ]

與if相同,for in也可寫在一行上,並將循環條件後置。

CoffeeScript可以使用by關鍵字實現遍歷每第n個成員

evenNumbers = (n  for n in [0..10] by 2)
# evenNumbers爲[0, 2, 4, 6, 8, 10]

簡單對象

CoffeeScript中的對象與JavaScript中的相似,可是在聲明時有些不一樣,CoffeeScript中聲明對象時能夠省略大括號,使用縮進來肯定對象的結構;同時,在不一樣行聲明對象屬性,能夠省略逗號,相似於數組的聲明。

bicyle = 
    color: 'black'
    brand: 
        make: 'Surly'
        model: 'Cross Check'
    fenders: true
    gears: 24

遍歷對象

使用for..of遍歷對象

author = name : "Ian", age: 26, favoriteLanguage: "CoffeeScript"
for k, v of author
    console.log "My" + k + " is " + v
相關文章
相關標籤/搜索