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(true == true) console.log "Test"
去除括號版:
if true == true console.log "Test"
同時,CoffeeScript在全部控制結構(如if語句,循環或者函數)中都不使用大括號,而是使用縮進來控制代碼執行。
用法相似於JavaScript。例:
number = -8 if number > 0 "Positive" else if number < 0 "Negative" else "Zero"
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