JavaScript 模式之條件 前端早讀課第24期

任何你寫的代碼,超過 6 個月不去看它,當(dāng)你再看時,都像是別人寫的。

本期編輯: 小蟲巨蟹,九彩拼盤

條件語句的寫法

常規(guī)寫法

if (type === 'foo' || type === 'bar') {
}

寫法1:用正則

if (/^(foo|bar)$/.test(type)) {
}

寫法2:用對象

if (({foo:1, bar:1})[type]) {
}

對于上面的3種寫法。

  1. 常規(guī)寫法的性能比用正則好。
  2. 在條件判斷數(shù)量(數(shù)量小于5)比較少的情況下,常規(guī)寫法比用對象快。條件多的情況下,用對象更快。

具體的benchmark 見這里

常規(guī)寫法

if (value == 0) {
  return result0;
} else if (value == 1) {
  return result1;
} else if (value == 2) {
  return result2;
} else if (value == 3) {
  return result3;
} else if (value == 4) {
  return result4;
} else if (value == 5) {
  return result5;
} else if (value == 6) {
  return result6;
} else if (value == 7) {
  return result7;
} else if (value == 8) {
  return result8;
} else if (value == 9) {
  return result9;
} else {
  return result10;
}

優(yōu)化寫法:用二分法

if (value < 6) {
  if (value < 3) {
    if (value == 0) {
      return result0;
    } else if (value == 1) {
      return result1;
    } else {
      return result2;
    }
  } else {
    if (value == 3) {
      return result3;
    } else if (value == 4) {
      return result4;
    } else {
      return result5;
    }
  }
} else {
  if (value < 8) {
    if (value == 6) {
      return result6;
    } else {
      return result7;
    }
  } else {
    if (value == 8) {
      return result8;
    } else if (value == 9) {
      return result9;
    } else {
      return result10;
    }
  }
}

判斷值是數(shù)字的常規(guī)寫法

if (value == 0) {
  return result0;
} else if (value == 1) {
  return result1;
} else if (value == 2) {
  return result2;
}

優(yōu)化寫法: 用數(shù)組

var results = [result0, result1, result2];
return results[value];

對于 if 內(nèi)容只有一行內(nèi)容的簡寫

var 
      type = 'foo',
      type2 = 'bar',
      result = 0;
      
type == 'foo' && result++;
console.log(result); // 1
!type == 'foo' || result++;
console.log(result); // 2
type == 'foo' && type2 == 'bar' && result++;
console.log(result); //3
type == 'foo' && type2 == 'bar' && result == 3 && (result=0)
console.log(result); //0
type == 'OOF' || result++; //equivalent: type != 'OOF' && result++;
console.log(result); //1

所有 JavaScript 模式:http://shichuan.github.io/javascript-patterns/

文章推薦

《Vue 組件間的樣式污染》

背景

Vue 組件的組件化寫法符合 web component 這種面向未來的規(guī)范,然而在樣式隔離方面,它依然有一點美中不足。

概要

  1. 污染是如何產(chǎn)生的?
  2. 增加 Scoped 標(biāo)識
  3. ScopeId 的繼承
  4. 怎么破?
  5. 這應(yīng)當(dāng)屬于 Vue-loader 的一個 bug

閱讀地址:http://www.itdecent.cn/p/b7292d01c361

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在線閱讀 http://interview.poetries.top[http://interview.poetr...
    前端進階之旅閱讀 115,570評論 24 450
  • 原文: https://github.com/ecomfe/spec/blob/master/javascript...
    zock閱讀 3,488評論 2 36
  • 16-01-28 星期四 下雨天 26天 回南天就這么猝不及防的來了。 下了一整天的雨,沒完沒了的下。 到處濕嗒...
    年念玲閱讀 1,039評論 0 0
  • 十年不見,我們聊點什么。還是談?wù)勎覀冊?jīng)的青春吧。 思想就像內(nèi)褲,別輕易露出來。只有知根知底了,我們才開始討論深一...
    琳小喵閱讀 347評論 0 0
  • 在其位謀其事,學(xué)生會歷練的是政治上的對決,和官場上的爾虞我詐相比學(xué)生會的相對幼稚低級,外面的世界多的是與人來往,人...
    故宿閱讀 218評論 0 0

友情鏈接更多精彩內(nèi)容