codecamp

CoffeeScript流程控制

CoffeeScript使用来自ruby的省略语法,让控制流变得很紧凑,也引进了unless,not,then等语法糖式的关键字

result = if not true then "false"
result = unless true then "false"
CoffeeScript中非常好的一点,就是直接取消了js中的==判断,改成全部用===进行严格比较,js中的==会做大量诡异的类型转换,很多情况下是bug的来源

if "1" == 1 
  alert("equal")
else
  alert("not equal")
在使用if来进行空值的判断时,js有时会让人困扰,因为""和0都会被转换成false,Coffee提供了?操作符解决这个问题,她只有在变量为null或undefined时才为false

""? #true
null? #false
也可以用常见的类似ruby中||=的方法,判断赋值,此外还可以用and,or,is关键字代替&&,||,==

hash or= {}
hash ?= {}
经常有当某个属性存在的时候,才会调用属性上的方法的情况,这时候也可以用?

knight.hasSword()?.poke()
只有当hasSword()返回对象不为空时,才会调用poke方法,以下是编译的js代码

var _ref;
if ((_ref = knight.hasSword()) != null) {
  _ref.poke();
}
另一种情况是当poke方法存在时才调用

knight.hasSword().poke?()
对应的js代码

var _base;
if (typeof (_base = knight.hasSword()).poke === "function") {
  _base.poke();
}
switch case语句也有了一些语法糖,并且会默认加上break

switch day
  when "Sun" then go relax
  when "Sat" then go dancing
  else go work

CoffeeScript数组
CoffeeScript模式
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }