注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

断尘居

温柔的男人像海洋。

 
 
 
 
 

日志

 
 

CoffeeScript语言参考  

2014-04-12 16:06:07|  分类: JS / jQuery |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

通用

  • 空格有意义
  • 结束表达式即结束代码行;无需使用分号
  • 分号可以用来在一行代码中分隔多个表达式
  • 使用缩进代替用花括号{}包围函数中的代码块、if语句、switch及try/catch
  • 注释#开头,直到一行末尾

嵌入JavaScript

  • 在CoffeeScript中嵌入JavaScript代码要使用``

函数

  • 函数以在圆括号中包含可选参数、向右箭头和可选的函数体来定义。空函数的语法是:->
  • 只要传入参数,调用函数就不必使用圆括号;隐式的调用直至行尾或表达式结束
  • 函数可以为参数定义默认值;传入非空参数可以覆盖默认值

对象与数组

  • 对象和数组与JavaScript中类似
  • 如果每个属性(值)单独一行,则用作分隔符的逗号可以省略
  • 与YAML类似,可以使用缩进而不是显式的花括号来创建对象
  • class等保留字可以直接用作对象的属性,不必将它们作为字符串而加引号

词法作用域与变量安全

  • 变量是使用的时候隐式声明的(没有var关键字)
  • 编译器确保变量在词法作用域中声明;已经在作用域中声明的外部变量不会在函数内部再次声明
  • 使用内部变量不会遮蔽外部变量,而只会引用外部变量;因此,不要在深度嵌套的函数中重用外部变量名
  • CoffeeScript的输入被包装在一个匿名函数中,因此污染全局命名空间的可能性极小
  • 如果要给其他脚本创建顶级变量,要把这些变量作为window对象的属性来声明,或者在CommonJS中作为exports对象的属性来声明:exports ? this

if、else、unless与条件赋值

  • if/else语句不用带圆括号和花括号
  • 多行条件语句以缩进来分隔
  • _if和unless在语句末尾可以连写
  • if语句可以用作表达式,不必使用?:

带参(splats)

  • 带参指...,可以用来代替arguments对象的可变参数,可以在定义和调用函数时使用

循环与推导(comprehension)

  • for ... in推导适用于数组、对象和范围
  • 推导使用可选的控制子句和当前数组索引的值代替循环:for value, index in array
  • 数组推导是表达式,可以返回和赋值
  • 推导可以代替each/forEachmapselect/filter
  • 在知道循环的起点和终点的情况下使用范围(整数步长)
  • 使用by指定固定大小的步长
  • 在把推导的结果赋值给变量时,CoffeeScript会把每次迭代的结果收集到一个数组中
  • 如果循环的结果只产生副作用,那么要返回nullundefinedtrue
  • 要迭代对象的键和值,使用of
  • 使用for own key, value of object迭代直接在对象中定义的键
  • while是CoffeeScript提供的唯一的低级循环;while循环可以用作表达式,返回一个数组,包含每次循环的结果
  • until等价于while not
  • loop等价于whilt true _ do关键字用于插入闭包,转发所有参数并调用传入的函数

利用范围进行数组切分和接合

  • 可以用范围来切分数组
  • 两个点的范围[3..6]表示包括后一个位置,即(3,4,5,6)
  • 三个点的范围[3...6]表示排除后一个位置,即(3,4,5)
  • 同样的语法可以用在赋值语句中用几个新值来替换数组中的一段,即接合
  • 字符串是不可变的,不能接合

一切都是表达式

  • 函数始终会返回它们的最终值
  • 代码执行中的每个分支都会返回值
  • 要从函数体中早些返回,要明确使用return
  • 变量是在作用域顶部声明的,因此即使是现在还没有的变量,也可以在表达式中给它赋值
  • 如果在表达式中使用语句,也会通过把它封装在闭包中转换成表达式;这样,可以把推导得到的结果赋值给变量
  • 以下几个关键字不是表达式:breakcontinuereturn

运算符与别名

  • CoffeeScript把==编译成===、把!=编译成!==。没有与JavaScript中的==等价的运算符
  • 别名is等价于===,isnt等价于!==
  • not是!的别名
  • 逻辑运算符的别名:and表示&&,or表示||
  • whileif/elseswitch/when语句中,可以使用then关键字把代码保持在一行上
  • 布尔值true的别名是onyes(与YAML中类似)
  • 布尔值false的别名是offno
  • 在单行语句中,unless可以表示if条件的反转
  • 使用@property而不是this.property
  • 使用in测试数组是否存在
  • 使用of测试对象的键是否存在

扩展的运算符

  • 使用扩展运算符?检查变量是否存在
  • 在变量不是nullundefined的情况下,?返回true
  • 在处理数值或字符串时,使用?=而不是||=可以实现更安全的赋值
  • 扩展运算符的访问器变体?.可以在连缀的属性中吸取空引用
  • 在属性值可能是nullundefined的情况下,使用?.而不是点访问运算符;如果所有的属性都存在,则返回期望的值,否则连缀中断,返回undefined

类、继承与超类

  • 对象与大多数面向对象语言中的对象相似
  • 在一条赋值表达式中,可以使用class定义类,使用extends定义超类并为原型属性赋值,还可以定义constructor
  • 构造函数以class的名字命名,以便支持反射
  • 低级运算符:extends可以辅助进行适当的原型设置;::用于访问对象的原型。super()用于调用直接父类的同名方法
  • 在类定义中,this引用类对象本身(即constructor函数),因此可以使用@property: value指定静态属性,可以使用@inheritedMethodName()调用父类中定义的函数

交换赋值

  • 为了方便从复杂的数组和对象中提取值,CoffeeScript实现了交互赋值
  • 在把数组和对象字面量赋给某个值时,CoffeeScript会将赋值语句两边分解,相互匹配,把右边的值赋给左边的值
  • 最简单的平行赋值的例子是[a,b] = [b,a]
  • 可以与返回多个值的函数一起使用
  • 可以与任何嵌套深度的数组及对象一起使用(以获得嵌套的属性),也可以与带参一起使用

函数绑定

  • 大箭头=>可以定义函数并将函数绑定到this
  • 在使用基于回调的库并创建传递给each的迭代函数,或者使用bind创建事件处理程序时很有用
  • 使用=>创建的函数可以访问它所在的this对象的属性

switch/when/else

  • switch语句的每个case子句后面不需要加break
  • switch是一个可返回、可赋值的表达式
  • 格式是:switch条件,when子句,else默认情况
  • 每个when子句可以有多个值,以逗号分隔;任何一个值匹配,则运行子句

try/catch/finally

  • try/catch语句与JavaScript中相同(尽管在CoffeeScript中是表达式)

字符串插入、长注释与块注释

  • 单引号中的字符串是字面量;使用反斜杠转义字符
  • 双引号中的字符串可以接受插入,使用#{...}
  • 字符串可以跨行写
  • 可以使用长注释'''来格式化或缩进文本(或避免转义引号和撇号)
  • 开始长注释的缩进级别始终会保持,因此注释文本可以与代码体对齐
  • 双引号的长注释"""可以接受插入
  • 块注释###与长注释类似,在生成的代码中也会得到保留

连缀比较

  • 使用连缀比较 minimun < value < maximum 来测试值是否包含在某个范围内

扩展正则表达式

  • 扩展的正则表达式“长正则”由///分隔,与长注释和块注释类似
  • 扩展的正则表达式忽略内部空格,而且可以包含注释

保留字

enter image description here


---------------------------------------------------

原文:http://www.ituring.com.cn/article/559

  评论这张
 
阅读(722)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017