CoffeeScript基础

语句

CoffeeScript没有分号,语句由新的一行结束,但是可以使用\将语句延续至下一行。

有时可以跨行实现函数调用:

"foo".
.concat("barbaz")
.replace("foobar", "fubar")

也可以把几条语句写在同一行,使用分号分隔。

变量

CoffeeScript变量不需要定义,且默认都是局部变量。如:

x = 1
y = 2

被编译为:

var x,y;
x = 1;
y = 2;

如果确实想使用全局变量,那么在node或者coffee控制台中,将变量绑定到global,在浏览器中,将变量绑定到window。

注释

使用#开始的都是注释,仅能在一行中。使用###表示的注释能够跨行。

函数调用

类似于JavaScript的函数调用:

console.log("hello planet")

另一种函数调用:

console.log "Hello planet." #单参数
Math.pow 2, 3 #多参数

但是如果调用的函数没有参数,必须使用小括号。如:

Date.now()

因为在没有参数的时候,如果不加括号的话是访问函数对象还是执行函数并不清楚,使用小括号可以区分两者。不偏离JavaScript语言的基本原理,是CoffeeScript哲学的一部分。

优先权

函数调用优先级原则:参数由内向外分配给函数,即参数所属的函数遵循最近原则。例:

# 以下两种调用等价
Math.max 2, 3, Math.min 4, 5, 6
Math.max 2, 3, Math.min(4, 5, 6)

控制结构

CoffeeScript中的控制结构和JavaScript基本一致。

CoffeeScript的多行模式:在控制台按Ctrl+V,然后就可以输入多行代码,最后按Ctrl+V退出多行模式并执行输入的多行代码

if语句

标准if语句的写法:

if(true == true)
console.log "Test"

去除括号版:

if true == true
console.log "Test"

同时,CoffeeScript在所有控制结构(如if语句,循环或者函数)中都不使用大括号,而是使用缩进来控制代码执行

else和else if语句

用法类似于JavaScript。例:

number = -8
if number > 0
"Positive"
else if number < 0
"Negative"
else
"Zero"

unless语句

unless当测试条件为假值的时候执行分支语句块。与if相反。例:

day = "Monday"
unless day[0] == "S"
console.log "This is a weekday."

unless语句也可以与else,else if语句一起使用

单行形式

if语句可以写成单行形式,例:

console.log "Test" if true == true

unless语句也支持这种写法。

比较运算符

在CoffeeScript中,==被编译为===!=被编译为!==

CoffeeScript提供了一些别名用法增强代码的可读性,

CoffeeScript JavaScript
is ===
isnt !==
not !
and &&
or ||
true,yes,on true
false,on ,off false
@,this this
of in
in 无对应js

数组

数组声明使用和JavaScript中一致

如果每个数组成员单独在一行声明,则可省略逗号

languages = [
"english"
"french"
"chinese"
]

数列

可以使用数列创建连续数字组成的数组。其中两个..代表包含尾边界,三个...代表不包含尾边界。除了使用数字常量,也可以使用变量来创建。

arr = [0..3] # 等价于 arr = [0,1,2,3]
arr2 = [3..0] # 等价于 arr2 = [3,2,1,0]
arr3 = [0...3] # 等价于 arr3 = [0,1,2] start = 0
end = 3
arr4 = [start..end] # 等价于arr4 = [0,1,2,3]

数列的实现原理:

var end, start, _i, _results;
start = 0;
end = 100;
numbers = (function(){
_results = [];
for(var _i = start;
start <= end ? _i <= end : _i >= end;
start <= end ? _i++ : _i--)
{_results.push(i);}
return _results;
}).apply(this)

循环

CoffeeScript中的for in循环和JavaScript中的不同。迭代参数为数组元素,不是索引,不过需要使用索引的话,可声明for循环的第二个循环参数,即为索引。同时,还可以与when语句一起使用,起到进一步过滤的作用。例:

animals = ['dog','cat','bird']

# 使用带索引的for..in语句
for animal, index in animals
console.log index + ':' + animal # 使用when语句
for animal in animals when animal == 'cat'
console.log 'This is a cat'

与JavaScript不同的是,CoffeeScript数组for in循环有返回值,返回值为每次迭代的执行结果的数组。

pluralAnimals = for animal in animals
animal + 's' # pluralAnimals为[ 'dogs', 'cats', 'birds' ]

与if相同,for in也可写在一行上,并将循环条件后置。

CoffeeScript可使用by关键字实现遍历每第n个成员

evenNumbers = (n  for n in [0..10] by 2)
# evenNumbers为[0, 2, 4, 6, 8, 10]

简单对象

CoffeeScript中的对象与JavaScript中的类似,但是在声明时有些不同,CoffeeScript中声明对象时可以省略大括号,使用缩进来确定对象的结构;同时,在不同行声明对象属性,可以省略逗号,类似于数组的声明。

bicyle =
color: 'black'
brand:
make: 'Surly'
model: 'Cross Check'
fenders: true
gears: 24

遍历对象

使用for..of遍历对象

author = name : "Ian", age: 26, favoriteLanguage: "CoffeeScript"
for k, v of author
console.log "My" + k + " is " + v

《CoffeeScript应用开发》学习:第二章 编写第一个CoffeeScript应用程序的更多相关文章

  1. C语言编程入门之--第三章编写第一个C语言程序

    第三章 编写第一个C语言程序 导读:一般学一门计算机语言的第一堂上机课(“上机”顾名思义,上了计算机),就是往屏幕输出“hello world”,本章也不例外. 1.1 Hello,World! 这一 ...

  2. Android艺术开发探索——第二章:IPC机制(下)

    Android艺术开发探索--第二章:IPC机制(下) 我们继续来讲IPC机制,在本篇中你将会学习到 ContentProvider Socket Binder连接池 一.使用ContentProvi ...

  3. Xamarin iOS开发实战第1章使用C#编写第一个iOS应用程序

    Xamarin iOS开发实战第1章使用C#编写第一个iOS应用程序 C#原本是用来编写Windows以及Windows Phone的应用程序.自从Xamarin问世后.C#的作用就发生了非常大的变化 ...

  4. Knockout应用开发指南 第二章:监控属性(Observables)

    原文:Knockout应用开发指南 第二章:监控属性(Observables) 关于Knockout的3个重要概念(Observables,DependentObservables,Observabl ...

  5. oracle学习 第二章 限制性查询和数据的排序 ——03

    这里.我们接着上一小节2.6留下的问题:假设要查询的字符串中含有"_"或"%".又该如何处理呢? 開始今天的学习. 2.7  怎样使用转义(escape)操作符 ...

  6. 搭建Spring开发环境并编写第一个Spring小程序

    搭建Spring开发环境并编写第一个Spring小程序 2015-05-27      0个评论    来源:茕夜   收藏    我要投稿 一.前面,我写了一篇Spring框架的基础知识文章,里面没 ...

  7. ROS学习笔记三:编写第一个ROS节点程序

    在编写第一个ROS节点程序之前需要创建工作空间(workspace)和功能包(package).   1 创建工作空间(workspace) 创建一个catkin_ws: #注意:如果使用sudo一次 ...

  8. 使用PyQt来编写第一个Python GUI程序

    原文:使用PyQt来编写第一个Python GUI程序 本文由 伯乐在线 - Lane 翻译,Daetalus 校稿.未经许可,禁止转载!英文出处:pythonforengineers.com.欢迎加 ...

  9. Android:日常学习笔记(2)——分析第一个Android应用程序

    Android:日常学习笔记(2)——分析第一个Android应用程序 Android项目结构 整体目录结构分析 说明: 除了APP目录外,其他目录都是自动生成的.APP目录的下的内容才是我们的工作重 ...

随机推荐

  1. 优化Select 语句的原则

    优化Select 语句的原则 -摘抄<SQL Server 2005 性能监测与优化> Select 语句是数据库应用系统中最常用的语句之一,Select 语句设计的好坏直接影响到应用程序 ...

  2. 重装系统后,delphi7打开报错

    delphi7运行不正常的提示unable to rename'c:\program files\Borland\delphi7\Bin\delphi32.$$$'to'c:\program file ...

  3. SQL:over partition by与group by 的区别

    group by是对检索结果的保留行进行单纯分组,一般总爱和聚合函数一块用例如AVG(),COUNT(),max(),main()等一块用. partition by虽然也具有分组功能,但同时也具有其 ...

  4. Windows下: RubyMine + Ruby On Rails + mysql 搭建开发环境

    最近在接手一个手机项目.在搭建环境的过程中,遇到了一些问题,在下文中已做记录,并奉上个人的解决方案. 开发环境 win2003 ;  JetBrains RubyMine6.3.3 1.  下载最新版 ...

  5. 工程中建立多个src目录

    android 工程下可以有多个源代码的目录,不一定都要放到src下面.可以在 .classpath 文件中添加. 默认是这样的: <classpath> <classpathent ...

  6. php入门part3

    php函数 php函数和JScript的函数大同小异,这里主要强调一下不同之处. 函数的定义:function函数名(形参类表){ 函数体 } 函数的调用:函数名(实参类表) 在php里函数可以先调用 ...

  7. sqlserver无ldf日志文件附加的方法(数据库没有完全关闭,无法重新生成日志)

    数据库的ldf日志文件被删了,直接附加时报错:数据库没有完全关闭,无法重新生成日志 那怎么恢复数据呢?方法如下: 在数据库中新建一个同名的数据库(文件路径要与原来的相同,ldf的文件名也要相同),然后 ...

  8. HBase设计与开发性能优化(转)

    本文主要是从HBase应用程序设计与开发的角度,总结几种常用的性能优化方法.有关HBase系统配置级别的优化,这里涉及的不多,这部分可以参考:淘宝Ken Wu同学的博客. 1. 表的设计 1.1 Pr ...

  9. MongoDB的下载与安装

      MongoDB的下载与安装 一.简介 MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案.MongoDB 是一个介于关系 ...

  10. JS常用工具函数

    /** * Created by gaojun-pd on 2016/10/27. */ var Util = { /** * 1.判断非空 * 2.获取字符串真实长度 汉字算两位 * 3.判断参数类 ...