coffeeScript是一種輕量級的編程語言,能夠用編譯器生成原生javascript代碼。它簡化了許多javascript繁瑣的方式,可讓你用簡單的方式直接使用一行程序表明javascript多行代碼,並且編譯後還會根據最佳實踐
優化javascript代碼。它的語法像是python
和ruby
的混合,不用括號控制排版,直接用縮進表示。建議初學者一邊寫coffeescript
,一邊對照生成的javascript
代碼,能夠很快的瞭解coffeescript
的意義。 瀏覽器最後執行的仍是編譯後的javascript
代碼。javascript
首先來看一個 coffeescript
demo:java
if elvis alert "oh no" elvis = 3
編譯成 javascript
代碼以後:python
if (elvis){ alert("oh no"); elvis = 3; }
看上面的coffee代碼和js代碼,js中的圓括號被去掉了,畫括號也去掉了,分號;
也去掉了。編程
再好比:c#
if elvis alert "oh no" elvis = 3
編譯成 javascript
代碼以後:瀏覽器
if (elvis){ alert("oh no"); } elvis = 3;
最後一句代碼縮進方式不一樣,致使最終編譯的js也不同,coffee就是根據tab縮進
來進行排版的。ruby
聲明函數時coffee默認會把最後一行做爲函數的返回值,能夠不加return
,若是返回值爲空,能夠加上return
。編程語言
例如:函數
fill = (x) -> x * x
編譯後的js爲:優化
var fill; fill = function(x){ return x * x; }
這是coffe中最愛的一點,由於javascript中沒有相似c#
中的string.Format()
方法,拼接很長的字符串時代碼看起來可讀性不好。
# 這是cofee的註釋 eat = (x) -> alert "I eat #{x}!" eat food for food in ['toast', 'cheese', 'wine']
編譯後的js代碼:
var eat, food, _i, _len, _ref; eat = function(x) { return alert("I eat " + x + "!"); }; _ref = ['toast', 'cheese', 'wine']; for (_i = 0, _len = _ref.length; _i < _len; _i++) { food = _ref[_i]; eat(food); }
這裏能夠看出來使用coffee有多省事了吧。
coffee有一個像java同樣的...
的語法:
# ... 表示區間 numbers = [0,1,2,3,4,5,6,7,8,9] copy = numbers[0...numbers.length] middle = numbers[3...6]
==
和 !=
之間的比較在coffee中沒有==
,一概使用===
,因此也就沒有!=
,只有!==
。javascript中==
和===
的區別是:
三等操做符
===
用來判斷兩個變量是否相等,相等的前提是一樣的類型和一樣的值。
具體請參考個人另外一篇文章。
coffee可使用?
來判斷參數是否已定義或是null
值,例如:
if elvis? alert "oh no" elvis = 3
編譯後的js代碼:
var elvis; if (typeof elvis !== "undefined" && elvis !== null) { alert("oh no"); elvis = 3; }