集合与迭代

.....

先看例子:

arr = ["a1", "a2", "a3", "a4", "a5"]
arr[0..3] // ["a1", "a2", "a3", "a4"]
arr[-2..] // ["a4", "a5"]
arr[-3..3] // ["a3", "a4"]
arrRange = [1..5]//[1,2,3,4,5]

..包含右边区间。

arr = ["a1", "a2", "a3", "a4", "a5"]
arr[0...3] // ["a1", "a2", "a3"]
arr[-2...] // ["a4", "a5"]
arr[-3...3] // ["a3"]
arrRange = [1...5]//[1,2,3,4]

...不包含右边区间。

遍历

数组

arr = ["one", "two", "three", "four", "five"]

基本遍历:

console.log item for item in arr

加条件:

console.log item for item in arr when item isnt "two"

带索引:

console.log item for item,i in arr when i isnt 2

带循环项:

[1,5].map (i) -> console.log i*2 // 也可以用带索引的for循环

对象

obj = {a1: "a111", a2: "a222"}
console.log k,v for k,v of obj

循环

单行

console.log i for i in [0..5]

多行

for i in [0..5]
console.log i

条件语句

基本语法

eat food if cat is hungry
play game unless cat is hungry
play game if cat isnt hungry

生成js代码为:

if (cat === hungry) {
eat(food);
} if (cat !== hungry) {
play(game);
} if (cat !== hungry) {
play(game);
}

代码确实精简不少。

OO篇

使用coffeeScript实现面向对象写起来很爽。

类定义

class Animal
constructor: (name) ->
@name = name
sayhello: () ->
console.log @name
animal = new Animal('ray')
animal.sayhello()

生成的js代码为:

var Animal, animal;
Animal = (function() {
function Animal(name) {}
return Animal;
})(); this.name = name({
sayhello: function() {}
}); console.log(this.name);
animal = new Animal('ray');
animal.sayhello();

继承

class Animal
constructor: (name) ->
@name = name
sayhello: () ->
console.log @name
class Cat extends Animal
constructor:(name,@hungry) ->
super

CoffeeScriptjQuery

$(function(){})
|
|
$ ->

比如:

$(function() {
$('h1').click(function() {
$(this).html('I am clicked');
});
});
|
|
$ ->
$('h1').click ->
$(@).html 'I am clicked'

RequireBackbone

define [
'backbone'
'underscore'
'text!templates/yes.html'
], (Bacbone, _, tpl) -> class UserView extends Backbone.View events: {} initialize: (options)-> render: ->
@$el.html _.template( tpl, { } )

其他

对象判空

console?.log? 'log'

if (typeof console !== "undefined" && console !== null) {
if (typeof console.log === "function") {
console.log('log');
}
}

关于 ->=>

cat = ->
console.log this
cat = =>
console.log @
# ->的结果
var cat;
cat = function() {
return console.log(this);
};
# => 的结果
cat = (function(_this) {
return function() {
return console.log(_this);
};
})(this);

也就是说:=>(胖头号)可以直接获取父级作用域中的this关键字。

最后

CoffeeScript简介 <二>的更多相关文章

  1. {Django基础七之Ajax} 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解)

    Django基础七之Ajax 本节目录 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解) 一 Ajax简介 ...

  2. Windbg 脚本命令简介 二, Windbg command

    Windbg  脚本命令简介 二, Windbg  script command $<, $><, $$<, $$><, $$>a< (Run Scri ...

  3. {Django基础七之Ajax} 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解)

    {Django基础七之Ajax} 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解)   Django基础七之 ...

  4. WPF Binding值转换器ValueConverter使用简介(二)-IMultiValueConverter

    注: 需要继承IMultiValueConverter接口,接口使用和IValueConverter逻辑相同. 一.MultiBinding+Converter 多值绑定及多值转换实例 当纵向流量大于 ...

  5. Hibernate框架简介(二)基本使用增、删、改、查

    一.Hibernate框架简介 Hibernate是一个优秀的Java持久化层解决方案,是当今主流的对象-关系映射(ORM,ObjectRelationalMapping)工具 1.1.理解持久化 瞬 ...

  6. Selenium简介(二)--基于CORE/IDE的简单应用

    参考  http://blog.csdn.net/iamqa/article/details/4398240 Selenium简介(一)--总体介绍  http://blog.csdn.net/iam ...

  7. Redis简介二

    一.直接安装     1.Windows版本的Redis下载地址:https://github.com/dmajkic/redis/downloads  ,选择一个你想要下载的版本下载即可~     ...

  8. RSA简介(二)——模幂算法

    RSA最终加密.解密都要用到模乘的幂运算,简称模幂运算. 回忆一下RSA,从明文A到B B=Ae1%N 对B解密,就是 A=Be2%N 其中,一般来说,加密公钥中的e1一般会比较小,取65537居多, ...

  9. SystemVerilog语言简介(二)

    6. 用户定义的类型 Verilog不允许用户定义新的数据类型.SystemVerilog通过使用typedef提供了一种方法来定义新的数据类型,这一点与C语言类似.用户定义的类型可以与其它数据类型一 ...

随机推荐

  1. Word Highlight设置详解

  2. hdu 2112 map+Dijkstra

    无向图 用map 起点和终点可能一样 数组不能开太大 WA了好多发 Sample Input6xiasha westlake //起点 终点xiasha station 60xiasha Shoppi ...

  3. hdu 1588 求f(b) +f(k+b) +f(2k+b) +f((n-1)k +b) 之和 (矩阵快速幂)

    g(i)=k*i+b; 0<=i<nf(0)=0f(1)=1f(n)=f(n-1)+f(n-2) (n>=2)求f(b) +f(k+b) +f(2*k+b) +f((n-1)*k + ...

  4. Delphi自动适应屏幕分辨率的属性

    https://www.cnblogs.com/zhangzhifeng/category/835602.html 这是个困惑我很长时间的问题,到今天终于得到解决了. 话说Delphi有个很强的窗体设 ...

  5. 编译Caffe出错,解决方案记录

    1.This file was generated by an older version of protoc which is python环境和Anaconda python环境可能存在冲突. 使 ...

  6. asp.net core日志组件

    日志介绍 Logging的使用 1. appsettings.json中Logging的介绍 Logging的配置信息是保存在appsettings.json配置文件中的.因为之前介绍配置文件的时候我 ...

  7. SparseArray源码解析

    转载自SparseArray源码解析 No1: Android官方推荐:当使用HashMap(K, V),如果K为整数类型时,使用SparseArray的效率更高. No2: HashMap是使用数组 ...

  8. 中间人攻击工具mitmf(另类的XSS注入攻击)

    中间人攻击工具mitmf(另类的XSS注入攻击) (一)简介 (二)安装 (三)结合beef使用 (一)简介 Mitmf 是一款用来进行中间人攻击的工具.它可以结合 beef 一起来使用,并利用 be ...

  9. C语言--pow()函数实现

      为什么自己实现一个pow()函数呢?昨天在Linux操作系统中调用这一个函数时,一直报错,也没有查找到具体的原因.故心血来潮实现这一函数功能. 函数所在头文件:   在"math.h&q ...

  10. CodeForces903G Yet Another Maxflow Problem 扫描线 + 线段树 + 最小割

    给定两条链\(A, B\),其中\(A\)链某些点向\(B\)链有连边,支持修改\(A\)链中的某条边权以及查询\(A_1\)到\(B_n\)的最大流 显而易见,\(A\)和\(B\)链中一定满足左部 ...