CoffeeScript简介 <二>
集合与迭代
.. 与 ...
先看例子:
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
CoffeeScript 与 jQuery
$(function(){})
|
|
$ ->
比如:
$(function() {
$('h1').click(function() {
$(this).html('I am clicked');
});
});
|
|
$ ->
$('h1').click ->
$(@).html 'I am clicked'
Require 与 Backbone
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简介 <二>的更多相关文章
- {Django基础七之Ajax} 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解)
Django基础七之Ajax 本节目录 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解) 一 Ajax简介 ...
- Windbg 脚本命令简介 二, Windbg command
Windbg 脚本命令简介 二, Windbg script command $<, $><, $$<, $$><, $$>a< (Run Scri ...
- {Django基础七之Ajax} 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解)
{Django基础七之Ajax} 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解) Django基础七之 ...
- WPF Binding值转换器ValueConverter使用简介(二)-IMultiValueConverter
注: 需要继承IMultiValueConverter接口,接口使用和IValueConverter逻辑相同. 一.MultiBinding+Converter 多值绑定及多值转换实例 当纵向流量大于 ...
- Hibernate框架简介(二)基本使用增、删、改、查
一.Hibernate框架简介 Hibernate是一个优秀的Java持久化层解决方案,是当今主流的对象-关系映射(ORM,ObjectRelationalMapping)工具 1.1.理解持久化 瞬 ...
- Selenium简介(二)--基于CORE/IDE的简单应用
参考 http://blog.csdn.net/iamqa/article/details/4398240 Selenium简介(一)--总体介绍 http://blog.csdn.net/iam ...
- Redis简介二
一.直接安装 1.Windows版本的Redis下载地址:https://github.com/dmajkic/redis/downloads ,选择一个你想要下载的版本下载即可~ ...
- RSA简介(二)——模幂算法
RSA最终加密.解密都要用到模乘的幂运算,简称模幂运算. 回忆一下RSA,从明文A到B B=Ae1%N 对B解密,就是 A=Be2%N 其中,一般来说,加密公钥中的e1一般会比较小,取65537居多, ...
- SystemVerilog语言简介(二)
6. 用户定义的类型 Verilog不允许用户定义新的数据类型.SystemVerilog通过使用typedef提供了一种方法来定义新的数据类型,这一点与C语言类似.用户定义的类型可以与其它数据类型一 ...
随机推荐
- 【C++ Primer | 19】运行类型识别
运行类型识别 一.使用RTTI dynamic_cast运算符的调用形式如下所示: dynamic_cast<type*>(e) //e是指针 dynamic_cast<type&a ...
- Zookeeper笔记(一)初识Zookeeper
为什么需要Zookeeper Zookeeper是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它实现诸如数据发布/订阅.负载均衡.命名服务.分布式协调/通知.集群管理.Master选举 ...
- 024 IDEA不能新建spring下的配置文件xml
这个问题以前就遇到过,一直懒得解决,现在必须要用了,解决了一下,发现网上的解决方式果然不错. 1.现象 2.解决方式 需要添加一下spring context的依赖即可
- 063 日志分析(pv uv 登录人数 游客人数 平均访问时间 二跳率 独立IP)
1.需求分析 分析指标 pv uv 登录人数 游客人数 平均访问时间 二跳率 独立IP 2.使用的日志(一号店),会话信息 3.创建数据库 4.创建源表,存储源数据 5.创建我们需要的use表 6.创 ...
- 蛋疼的mocha库-promise异步测试
mocha 测试库的使用 错误的处理异步测试 异步当出现断言错误的时候,他会抛出错误,但不会把这次测试当作失败,就是正确的顺利通过测试了,很无语. promise的reject会在then的第二个函数 ...
- Jmeter的安装和启动错误总结,出现unable to access jarfile apachejmeter.jar error value=1错误处理
Jmeter是纯Java开发的, 能够运行Java程序的系统一般都可以运行Jmeter, 如:Windows. Linux. mac等. 由于是由Java开发,所以自然需要jdk环境. Windows ...
- 阿里云服务器配置免费https服务
过程总述 购买服务器,购买域名,备案 申请ssl证书 DNS验证 上传证书,配置nginx 很关键,打开端口!!!阿里云的443端口默认是不打开的 1.购买服务器,域名,备案 服务器我是买的阿里云的, ...
- 基于tensorflow搭建一个神经网络
一,tensorflow的简介 Tensorflow是一个采用数据流图,用于数值计算的 开源软件库.节点在图中表示数字操作,图中的线 则表示在节点间相互联系的多维数据数组,即张量 它灵活的架构让你可以 ...
- String、StringBuffer和StringBulder
String:不可改变的Unicode字符序列. 池化思想,把需要共享的数据放在池中,用一个存储区域来存放一些公用资源以减少存储空间的开销. 在String类中,以字面值创建时,会到Java方法空间的 ...
- 码云 使用 汉化 GitHub
enhancement 增强feature 功能duplicate 重复的invalid 无效的wontfix 无法修改 不处理 ===== Wiki 主要是您项目的文档(说明, 状态)等等. 该项目 ...