CoffeeScript简介 <一>
介绍
coffeeScript是一种轻量级的编程语言,可以用编译器生成原生javascript代码。它简化了许多javascript繁琐的方式,可以让你用简单的方式直接使用一行程序代表javascript多行代码,而且编译后还会根据最佳实践
优化javascript代码。它的语法像是python
和ruby
的混合,不用括号控制排版,直接用缩进表示。建议初学者一边写coffeescript
,一边对照生成的javascript
代码,可以很快的了解coffeescript
的意义。 浏览器最后执行的还是编译后的javascript
代码。
语法
去掉多余的符号&&使用缩进
首先来看一个 coffeescript
demo:
if elvis
alert "oh no"
elvis = 3
编译成 javascript
代码之后:
if (elvis){
alert("oh no");
elvis = 3;
}
看上面的coffee代码和js代码,js中的圆括号被去掉了,画括号也去掉了,分号;
也去掉了。
再比如:
if elvis
alert "oh no"
elvis = 3
编译成 javascript
代码之后:
if (elvis){
alert("oh no");
}
elvis = 3;
最后一句代码缩进方式不同,导致最终编译的js也不一样,coffee就是根据tab缩进
来进行排版的。
函数
声明函数时coffee默认会把最后一行作为函数的返回值,可以不加return
,如果返回值为空,可以加上return
。
例如:
fill = (x) ->
x * x
编译后的js为:
var fill;
fill = function(x){
return x * x;
}
字符串占位符
这是coffe中最爱的一点,因为javascript中没有类似c#
中的string.Format()
方法,拼接很长的字符串时代码看起来可读性很差。
# 这是cofee的注释
eat = (x) -> alert "I eat #{x}!"
eat food for food in ['toast', 'cheese', 'wine']
编译后的js代码:
var eat, food, _i, _len, _ref;
eat = function(x) {
return alert("I eat " + x + "!");
};
_ref = ['toast', 'cheese', 'wine'];
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
food = _ref[_i];
eat(food);
}
这里可以看出来使用coffee有多省事了吧。
区间使用
coffee有一个像java一样的...
的语法:
# ... 表示区间
numbers = [0,1,2,3,4,5,6,7,8,9]
copy = numbers[0...numbers.length]
middle = numbers[3...6]
关于 ==
和 !=
之间的比较
在coffee中没有==
,一律使用===
,所以也就没有!=
,只有!==
。javascript中==
和===
的区别是:
三等操作符
===
用来判断两个变量是否相等,相等的前提是同样的类型和同样的值。
具体请参考我的另一篇文章。
对象判空
coffee可以使用?
来判断参数是否已定义或是null
值,例如:
if elvis?
alert "oh no"
elvis = 3
编译后的js代码:
var elvis;
if (typeof elvis !== "undefined" && elvis !== null) {
alert("oh no");
elvis = 3;
}
CoffeeScript简介 <一>的更多相关文章
- CoffeeScript简介 <二>
集合与迭代 .. 与 ... 先看例子: arr = ["a1", "a2", "a3", "a4", "a5 ...
- {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语言类似.用户定义的类型可以与其它数据类型一 ...
随机推荐
- RabbitMQ(三): exchange 的使用
1. Exchange(交换机) 生产者只能发送信息到交换机,交换机接收到生产者的信息,然后按照规则把它推送到对列中. 一方面是接收生产者的消息,另一方面是像队列推送消息. 匿名转发 "&q ...
- 基于bootstrap的基本模板
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...
- Oracle GoldenGate常用配置端口
1 简介 Oracle Golden Gate软件是一种基于日志的结构化数据复制备份软件,它通过解析源数据库在线日志或归档日志获得数据的增量变化,再将这些变化应用到目标数据库,从而实现源数据库与目标数 ...
- Spring事务传播行为
什么是事务传播行为 public void methodA(){ methodB(); //doSomething } @Transaction(Propagation=XXX) public voi ...
- 购物车的实现(jsp的session+Java的Map的结合)
1:电商如此发达的现在,作为一个web开发程序猿,如果不会写购物车,真是有点不好意思找工作.所以抓紧练习啊,从上篇博客中抽离出如何实现购物车的功能. 2:首先需要理解购物车实现的一些基本步骤. 2.1 ...
- Spring MVC的前端控制器模式
前端控制器模式 spring mvc也是依赖servlet,所以spring mvc的请求处理是从一个servlet开始,这个servlet就是DispatcherServlet.前端控制器模式(Fr ...
- Codeforces Round #395 (Div. 2)
今天自己模拟了一套题,只写出两道来,第三道时间到了过了几分钟才写出来,啊,太菜了. A. Taymyr is calling you 水题,问你在z范围内 两个序列 n,2*n,3*n...... ...
- Strom的集群停止以及启动
一:停止 1.概述 关于strom没有停止命令 2.第一种方式(kill) jps之后 使用bin/strom -kill wordcount 3.第二种方式(书写脚本) 4.先新建superviso ...
- 关于make: *** No rule to make target `clean'. Stop.这个莫名其妙问题的解决方法
执行make编译命令总报错,后来试试make clean命令也不行,报下面的错. make: *** No rule to make target `clean'. Stop. 真是莫名其妙的错误, ...
- Angular 个人深究(五)【外部包引用 Leaflet 简单实用】
Leaflet 使用 最近在Angular项目中,用到了地图,由于种种原因放弃了百度地图api使用,最后选择了leaflet,简单介绍一下. 介绍: Leaflet 是一个为移动设备设计的交互式地图的 ...