安装与使用
- 安装coffeeScript之前需要安装Node.js以及npm。
npm install -g coffee-script
- 用法
可以使用coffee
命令执行脚本。
-
-c, --compile
: 编译.coffee
文件到.js
文件。 -
-w, --watch
:监视文件改变,任何文件更新时重新执行命令。
- 注意:注意缩进注意缩进注意缩进。真的是血泪史... ... 千万注意缩进!!!
基础语法
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. 函数
add = (a) -> a + a
add2 = (a) -> add(a) + a
// 参数可以给默认值
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. 对象和数组
// 数组
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中 /**/
###
注释的内容 balabalabala.....
###
7. 存在性
alert "Got it!" if exist?
上面代码等同于
if (typeof exist !== 'undefined' && exist !== null) {
alert('Got it!');
}
8. 循环
say person for person in ['Sun', 'Lee', 'Lu']
// 在推导式中使用by子句,可以实现以固定跨度迭代范围值
evens = (x for x in [0..10] by 2)
// 循环对象
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;
})();
// 循环对象
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. 数组的切片和拼接
- 切片
arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
如果通过两个点的写法(3..6)
,则会包含最后一个数据,结果为4, 5, 6, 7
; 如果通过3个点的写法(3...6)
, 则不会包含最后一个数据,结果为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];
网友评论