CoffeeScript流程控制

2018-08-25 11:08 更新

CoffeeScript使用來(lái)自ruby的省略語(yǔ)法,讓控制流變得很緊湊,也引進(jìn)了unless,not,then等語(yǔ)法糖式的關(guān)鍵字

result = if not true then "false"
result = unless true then "false"
CoffeeScript中非常好的一點(diǎn),就是直接取消了js中的==判斷,改成全部用===進(jìn)行嚴(yán)格比較,js中的==會(huì)做大量詭異的類型轉(zhuǎn)換,很多情況下是bug的來(lái)源

if "1" == 1 
  alert("equal")
else
  alert("not equal")
在使用if來(lái)進(jìn)行空值的判斷時(shí),js有時(shí)會(huì)讓人困擾,因?yàn)?quot;"和0都會(huì)被轉(zhuǎn)換成false,Coffee提供了?操作符解決這個(gè)問(wèn)題,她只有在變量為null或undefined時(shí)才為false

""? #true
null? #false
也可以用常見(jiàn)的類似ruby中||=的方法,判斷賦值,此外還可以用and,or,is關(guān)鍵字代替&&,||,==

hash or= {}
hash ?= {}
經(jīng)常有當(dāng)某個(gè)屬性存在的時(shí)候,才會(huì)調(diào)用屬性上的方法的情況,這時(shí)候也可以用?

knight.hasSword()?.poke()
只有當(dāng)hasSword()返回對(duì)象不為空時(shí),才會(huì)調(diào)用poke方法,以下是編譯的js代碼

var _ref;
if ((_ref = knight.hasSword()) != null) {
  _ref.poke();
}
另一種情況是當(dāng)poke方法存在時(shí)才調(diào)用

knight.hasSword().poke?()
對(duì)應(yīng)的js代碼

var _base;
if (typeof (_base = knight.hasSword()).poke === "function") {
  _base.poke();
}
switch case語(yǔ)句也有了一些語(yǔ)法糖,并且會(huì)默認(rèn)加上break

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

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)