安装

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

语法

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

格式

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

  • CoffeeScript中的注释采用#

作用域

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

赋值

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

数组

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

流程控制

函数

  • CoffeeScript对JavaScript的函数做了很大的简化
  1. sum = (nums) ->
  2. nums.reduce(x, y) -> x + y
  3. sum 1,2,3
  4. //
  5. (function() {
  6. var sum;
  7. sum = function(nums) {
  8. return nums.reduce(x, y)(function() {
  9. return x + y;
  10. });
  11. };
  12. sum(1, 2, 3);
  13. }).call(this);
  • ->来代替function; 注意前面空一格
  • 参数列表放在->的前边,且可省略
  • 取消了函数声明,只能将函数作为值定义
  • 在CoffeeScript中,任何语句都是表达式(除了break和continue),都有返回值,因此像ruby一样,不需要显式return
  • CoffeeScript的函数可以有默认参数
  1. times = (a = 1, b = 2) -> a * b
  • CoffeeScript的函数调用可以不用()语法包围参数,像ruby一样跟在函数名后面就可以,不过这也有时候会带来问题,特别是没有参数的调用

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

  1. $(".toggle").toggle ->
  2. "on"
  3. , ->
  4. "off"
  5. //
  6. (function() {
  7. $(".toggle").toggle(function() {
  8. return "on";
  9. }, function() {
  10. return "off";
  11. });
  12. }).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. 类中实现 Dispose And Finalize

    1.Dispose方法中,应该使用GC.SuppressFinalize防止GC调用Finalize方法,因为显示调用Dispose比较好. 2.Disposed字段保证了两次调用Dispose方法不 ...

  2. [Android Pro] APK

    svn updatesvn status ls -alsvn log --limit 8 > RELEASE_NOTE.txt cat RELEASE_NOTE.txt chmod a+x gr ...

  3. September 1st 2016 Week 36th Thursday

    Everything is going on, but don't give up trying. 万事随缘,但不要放弃努力. There are numerous things that we ca ...

  4. ios layer 动画-(transform.rotation篇)

    x轴旋转: CABasicAnimation *theAnimation; theAnimation=[CABasicAnimation animationWithKeyPath:@"tra ...

  5. spring集成activeMQ

    1.安装activehttp://activemq.apache.org/activemq-5140-release.html2.运行D:\apache-activemq-5.14.0\bin\win ...

  6. 靶形数独(codevs 1174)

    1174 靶形数独 2009年NOIP全国联赛提高组  时间限制: 4 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 Descri ...

  7. 按键的使用(一)------verilog

    按键在项目中应用还是很频繁的,这里主要介绍按键的几种用法. 1.按下一次有效:按下一次计数器增加一下. 2.按下连续有效:按下不松,计数器就一直增加. 3.按下无效,松开有效:按下时计数器值不变,按键 ...

  8. php JS和JQ

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. CLR via C#(02)-基元类型、引用类型、值类型

    http://www.cnblogs.com/qq0827/p/3281150.html 一. 基元类型 编译器能够直接支持的数据类型叫做基元类型.例如int, string等.基元类型和.NET框架 ...

  10. MVC – 4.mvc初体验(1)

    1.MVC请求模式   2.MVC简单请求流程图 展开 折叠     3.返回string的mvc方法 展开 折叠   4.加载视图的方法