安裝與使用
- 安裝coffeeScript之前需要安裝Node.js以及npm。
npm install -g coffee-script
- 用法
可以使用coffee
命令執(zhí)行腳本桃纯。
-
-c, --compile
: 編譯.coffee
文件到.js
文件安拟。 -
-w, --watch
:監(jiān)視文件改變系草,任何文件更新時重新執(zhí)行命令。
- 注意:注意縮進注意縮進注意縮進夷陋。真的是血淚史... ... 千萬注意縮進A仙怼!衩茸!
基礎(chǔ)語法
1. 賦值
bf = 0
exist = false
2. String
使用''
或者""
符號芹血; 插值語法 #{...}
name = 'Sun'
interpolation = 'My name is #{name}'
3. 條件判斷
bf = 18 if exist
if a and b
exec()
else
stop()
date = if monday then mail : letter
上面代碼等同于
if (exist) {
bf = 18;
}
if (a && b) {
exec();
} else {
stop();
}
date = monday ? mail : letter;
4. 函數(shù)
add = (a) -> a + a
add2 = (a) -> add(a) + a
// 參數(shù)可以給默認值
fill = (container, liquid = "coffee") ->
"Filling ths #{container} with # {liquid}..."
上面代碼等同于
var add = function (a) {
return a + a;
}
var add2 = function (a) {
return add(a) + a;
}
var fill = function(container, liquid="coffee") {
return `Filling ths ${container} with ${liquid}...`
}
5. 對象和數(shù)組
// 數(shù)組
fruit = ['apple', 'banana', 'peach', 'mango']
// 對象
animal = {name: 'Cat', voice: 'Miao'}
a = 'sun'
b = 'lee'
ab = {a, b}
obj =
sun:
name: 'xxx'
age: 18
do: (a) -> a * a
max:
name: 'xxx'
age: 21
上面代碼等同于
var animal = {
name: "Cat",
voice: "Miao"
}
var a = 'sun';
var b = 'lee';
var ab = {a, b}; // {a: 'sun', b: 'lee'}
obj = {
sun: {
name: 'xxx',
age: 18,
do: (a) => a * a
},
max: {
name: 'xxx',
age: 21
}
}
6. 注釋
單行注釋 #
, 等同于js中 //
多行注釋###
,等同與js中 /**/
###
注釋的內(nèi)容 balabalabala.....
###
7. 存在性
alert "Got it!" if exist?
上面代碼等同于
if (typeof exist !== 'undefined' && exist !== null) {
alert('Got it!');
}
8. 循環(huán)
say person for person in ['Sun', 'Lee', 'Lu']
// 在推導(dǎo)式中使用by子句幔烛,可以實現(xiàn)以固定跨度迭代范圍值
evens = (x for x in [0..10] by 2)
// 循環(huán)對象
person = sun: 18, lee: 21, mike: 25
ages = for p, age of person
"#{p} is #{age}"
上面代碼等同于
var arr = ['Sun', 'Lee', 'Lu'];
for (var i = 0; i < arr.length; i++) {
person = arr[i];
say(person);
}
evens = (function() {
var _i, _results;
_results = [];
for (x = _i = 0; _i <= 10; x = _i += 2) {
_results.push(x);
}
return _results;
})();
// 循環(huán)對象
person = {
sun: 18,
lee: 21,
mike: 25
}
ages = (function() {
var results = [];
for (p in person) {
age = person[p];
results.push(`${p} is ${age}`);
}
return results;
}) ();
9. 數(shù)組的切片和拼接
- 切片
arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
如果通過兩個點的寫法(3..6)
啃擦,則會包含最后一個數(shù)據(jù),結(jié)果為4, 5, 6, 7
; 如果通過3個點的寫法(3...6)
, 則不會包含最后一個數(shù)據(jù)饿悬,結(jié)果為4, 5, 6
arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
a = arr[0..2];
上面代碼等同于
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
a = arr.slice(0, 3); // [1, 2, 3]
- 拼接
arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
arr[3..5] = [7, 7, 7];
上面代碼等同于
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
[].splice.apply(arr, [3, 3].concat[7, 7, 7]);
// arr -> [1, 2, 3, 7, 7, 7, 7, 8, 9]
- 擴展運算符
arr1 = [1, 2, 3];
arr2 = [4, 5, 6];
arr = [arr1..., arr2..., 9];
上面代碼等同于
arr1 = [1, 2, 3];
arr2 = [4, 5, 6];
arr = [...arr1, ...arr2, 9];