安装

  • 这里使用node.js
npm install -g coffee-script
# watch and compile
coffee -w --output lib --compile src
//
coffee -w -c index.coffee

语法

  • CoffeeScript不是JavaScript的超集,不能在CoffeeScript程序中写JavaScript代码

格式

  • CoffeeScript在编译时为每条语句加上;

  • CoffeeScript中的注释采用#

作用域

  • 会自动添加变量声明‘var’,放到作用域的顶部

赋值

  • 字符串可以用类ruby的语法内嵌
target = "world"
alert "hello, #{target}" //注意双引号
alert "hello" + target
  • 字面量
object1 = one: 1, two: 2
object2 =
one: 1
two: 2
arr1 = [1, 2]
arr2 = [
1,
2
]
  • 解构赋值
obj = {a:"foo", b:"bar"}
{a, b} = obj
arr = [1, 2]
[a, b] = arr

数组

  • 数组的操作引入了来自ruby的Range概念,并且可以将字符串完全作为数组操作
numbers = [0..9]  //两个或三个点号
numbers[3..5] = [-3,-4,-5] //替换number 3-5的值;可以是任意个数
my = "my string"[0..1]
  • 判断一个值是否在数组内
arr = ["foo", "bar"]
"foo" in arr
  • for..in语法
for name, i in ["roger", "roderick"]
alert "#{i} - Release #{name}"
  • 过滤器when
items = ["ranger", "roderick", "brian"]
alert 'ok' for item in items when item is "ranger"
  • 可以用()收集遍历的结果
items = [{id: 0, name: "ranger"}, {id: 1, name: "roderick"}, {id: 2, name: "brian"}]
result = (item for item in items when item.id is 1) //注意前面有个item;以数组形式返回

流程控制

函数

  • CoffeeScript对JavaScript的函数做了很大的简化
sum = (nums) ->
nums.reduce(x, y) -> x + y sum 1,2,3 //
(function() {
var sum; sum = function(nums) {
return nums.reduce(x, y)(function() {
return x + y;
});
}; sum(1, 2, 3); }).call(this);
  • ->来代替function; 注意前面空一格
  • 参数列表放在->的前边,且可省略
  • 取消了函数声明,只能将函数作为值定义
  • 在CoffeeScript中,任何语句都是表达式(除了break和continue),都有返回值,因此像ruby一样,不需要显式return
  • CoffeeScript的函数可以有默认参数
times = (a = 1, b = 2) -> a * b

  • CoffeeScript的函数调用可以不用()语法包围参数,像ruby一样跟在函数名后面就可以,不过这也有时候会带来问题,特别是没有参数的调用

  • 缩进的格式有时需要小心,比如用多个函数做参数的时候

$(".toggle").toggle ->
"on"
, ->
"off" //
(function() {
$(".toggle").toggle(function() {
return "on";
}, function() {
return "off";
}); }).call(this);

coffeeScript学习01的更多相关文章

  1. Python学习--01入门

    Python学习--01入门 Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.和PHP一样,它是后端开发语言. 如果有C语言.PHP语言.JAVA语言等其中一种语言的基础,学习Py ...

  2. Java虚拟机JVM学习01 流程概述

    Java虚拟机JVM学习01 流程概述 Java虚拟机与程序的生命周期 一个运行时的Java虚拟机(JVM)负责运行一个Java程序. 当启动一个Java程序时,一个虚拟机实例诞生:当程序关闭退出,这 ...

  3. Android Testing学习01 介绍 测试测什么 测试的类型

    Android Testing学习01 介绍 测试测什么 测试的类型 Android 测试 测什么 1.Activity的生命周期事件 应该测试Activity的生命周期事件处理. 如果你的Activ ...

  4. Java学习01

    Java学习01 第一章 1.JRE与JDK JDK(JAVA Develop Kit,JAVA开发工具包)提供了Java的开发环境和运行环境,主要用于开发JAVA程序,面向Java程序的开发者; J ...

  5. ThinkPhp学习01

    原文:ThinkPhp学习01 一.ThinkPHP的介绍           MVC  M - Model 模型                工作:负责数据的操作  V - View  视图(模板 ...

  6. 【iScroll源码学习01】准备阶段 - 叶小钗

    [iScroll源码学习01]准备阶段 - 叶小钗 时间 2013-12-29 18:41:00 博客园-原创精华区 原文  http://www.cnblogs.com/yexiaochai/p/3 ...

  7. JVM学习01:内存结构

    JVM学习01:内存结构 写在前面:本系列分享主要参考资料是  周志明老师的<深入理解Java虚拟机>第二版. 内存结构知识要点Xmind梳理 案例分析 分析1 package com.h ...

  8. webservice学习01:wsdl文档结构

    webservice学习01:wsdl文档结构 wsdl文档结构 WSDL文档示例 <wsdl:definitions xmlns:xsd="http://www.w3.org/200 ...

  9. spring学习(01)之IOC

    spring学习(01)之IOC IOC:控制反转——Spring通过一种称作控制反转(IOC)的技术促进了低耦合.当应用了IOC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创 ...

随机推荐

  1. HTML标签汇总

    标签 描述 DTD(Document Type Definition) <!-- --> 定义html注释 STF <a> 定义链接或者锚点 STF <abbr> ...

  2. java https tomcat 单双认证(含证书生成和代码实现) 原创转载请备注,谢谢O(∩_∩)O

    server: apache-tomcat-6.0.44 jdk1.7.0_79client: jdk1.7.0_79 jks是JAVA的keytools证书工具支持的证书私钥格式. pfx是微软支持 ...

  3. Jmeter 函数

    一._csvRead 函数 _cvsRead函数是从外部读取参数,csvRead函数可以从一个文件中读取多个参数. 步骤: 1.先新建一个文件,例如c.txt,里面的数据存放为 web@qq.com, ...

  4. C#学习笔记----AppDomain应用程序域

    使用.Net建立的可执行程序*.exe,并没有直接承载到进程当中,而是承载到应用程序域(AppDomain)当中.应用程序域是.Net引入的一个新概念,它比进程所占用的资源要少,可以被看做是一个轻量级 ...

  5. MVC – 9.mvc整体请求流程

    1.请求管道 2~5微软自己的验证,我们一般不用. 在全局配置文件中-已经配置一个路由过滤器-为第7个事件注册了路由方法   1.在application_start中向静态路由表注册了路由数据,在管 ...

  6. 23.备忘录模式(Memento Pattern)

    using System; using System.Collections.Generic; namespace ConsoleApplication6 { /// <summary> ...

  7. .net转的时间戳用java去解析的代码

    /// <summary> /// 转换成java解析一致的时间戳 /// </summary> /// <param name="time"> ...

  8. MSMQ创建消息队列出现“工作组安装计算机不支持该操作”

    [sceislqzw]:你在创建公有队列,而你的机器不属于任何域.一般工作组安装的计算机只能创建私有队列. System.Messaging.MessageQueue QueueReceive = n ...

  9. Genymotion刷入谷歌应用市场以及获取root权限

    Genymotion刷入谷歌应用市场以及获取root权限 - 推酷http://www.tuicool.com/articles/rEV3aa6 刷入gapp, arm框架,supersu的包要注意, ...

  10. python 之socket 网络编程

    socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. socket起源于Un ...