摘要:用且只用一個完成這一需求。執行時可以增加規則對要變量的合法性進行判斷。繼承該類時可以重載默認行為。讓對象擁有私有成員。理想情況下,應將調用其他函數的函數寫在被調用函數的上方。避免位置標記避免在源文件中寫入法律評論參考
變量
使用有意義、可讀性好的變量
使用 ES6 的 const 聲明常量
對功能類似的變量名采用統一的命名風格
使用易于檢索名稱
舉例
// 反例 for (var i = 0; i < 525600; i++) { runCronJob(); } // 正例 var MINUTES_IN_A_YEAR = 525600; for (var i = 0; i < MINUTES_IN_A_YEAR; i++) { runCronJob(); }
使用說明變量(即有意義的變量名)
顯式優于隱式(變量名盡量簡潔明了)
避免重復的描述
避免無意義的條件判斷
舉例
var currentPage=""; var pageNumInfo = JSON.parse(localStorage.getItem("pageNumInfo")); if (pageNumInfo) { currentPage = parseInt(pageNumInfo[0].pageNum); } else { currentPage = 1; } // 以上代碼片段可用以下代碼取代 var pageNumInfo = JSON.parse(localStorage.getItem("pageNumInfo")); var currentPage = parseInt(pageNumInfo[0].pageNum) || 1;函數
函數參數
函數參數理想情況下應該不超過 2 個。當確實需要多個參數時,大多情況下可以考慮將這些參數封裝成一個對象。
保證函數功能的單一性
功能不單一的函數將導致難以重構、測試和理解。功能單一的函數易于重構,并使代碼更加干凈。
提高函數名的可讀性(函數名應明確表明其功能)
函數應該只做一層抽象
當函數需要的抽象多于一層時通常意味著函數功能過于復雜,需將其進行分解以提高其可重用性和可測試性。
避免在一個函數中寫重復的代碼
采用默認參數精簡代碼
使用 Object.assign() 設置默認對象
不要使用標記(Flag)作為函數參數(會破壞函數功能的單一性)
避免副作用
函數副作用:當函數產生了除了“接受一個值并返回一個結果”之外的行為時,稱該函數產生了副作用。比如寫文件、修改全局變量等。
程序在某些情況下確實需要副作用這一行為,如先前例子中的寫文件。這時應該將這些功能集中在一起,不要用多個函數/類修改某個文件。用且只用一個 service 完成這一需求。
不要寫全局函數
采用函數式編程
封裝判斷條件
避免“否定條件”的判斷
避免條件判斷
許多情況下通過使用多態(polymorphism)可以達到同樣的目的。
// 反例 class Airplane { //... getCruisingAltitude() { switch (this.type) { case "777": return getMaxAltitude() - getPassengerCount(); case "Air Force One": return getMaxAltitude(); case "Cessna": return getMaxAltitude() - getFuelExpenditure(); } } } // 正例 class Airplane { //... } class Boeing777 extends Airplane { //... getCruisingAltitude() { return getMaxAltitude() - getPassengerCount(); } } class AirForceOne extends Airplane { //... getCruisingAltitude() { return getMaxAltitude(); } } class Cessna extends Airplane { //... getCruisingAltitude() { return getMaxAltitude() - getFuelExpenditure(); } }
避免類型判斷
避免過度優化
無效代碼及時刪除
對象和數據結構
使用 getters 和 setters
使用 getters 和 setters 獲取對象的數據遠比直接使用點操作符具有優勢,為什么呢??
1、當需要對獲取的對象屬性執行額外操作時。
2、執行 set 時可以增加規則對要變量的合法性進行判斷。
3、封裝了內部邏輯。
4、在存取時可以方便的增加日志和錯誤處理。
5、繼承該類時可以重載默認行為。
6、從服務器獲取數據時可以進行懶加載。
讓對象擁有私有成員。(可以通過閉包實現)
類列表項目
單一職責原則(SRP)
開閉原則(OCP)
代碼實體(類,模塊,函數等)應該易于擴展,難于修改。
即代碼模塊的功能應該要方便用戶拓展而不是修改源碼
利斯科夫替代原則(LSP)
子類對象應該能夠替換其超類(父類)對象被使用。
接口隔離原則(ISP)
客戶端不應該依賴它不需要的接口,一個類對另一個類的依賴應該建立在最小的接口上。
依賴反轉原則(DIP)
該原則有兩個核心點:
1、高層模塊不應該依賴于低層模塊。他們都應該依賴于抽象接口。
2、抽象接口應該脫離具體實現,具體實現應該依賴于抽象接口。
使用 ES6 的 classes 而不是 ES5 的 Function
典型的 ES5 的類(function)在繼承、構造和方法定義方面可讀性較差。
當需要繼承時,優先選用 classes。
但是,當在需要更大更復雜的對象時,最好優先選擇更小的 function 而非 classes。
使用方法鏈
優先使用組合模式而非繼承
測試單元測試,單一的測試每個概念
并發用 Promise 替代回調(支持 ES6 的情況,優先使用)
async 和 await(支持 ES7 的情況,優先使用)
錯誤處理try/catch 捕獲異常
不要忽略被拒絕的 promises
格式化大小寫一致
調用函數的函數和被調函數應放在較近的位置
當函數間存在相互調用的情況時,應將兩者置于較近的位置。理想情況下,應將調用其他函數的函數寫在被調用函數的上方。注釋
只對存在一定業務邏輯復雜性的代碼進行注釋。注釋并不是必須的,好的代碼是能夠讓人一目了然,不用過多無謂的注釋。
被注釋掉的代碼及時刪除
不需要版本更新類型注釋。需要時可以使用 git log 獲取歷史版本。
避免位置標記
避免在源文件中寫入法律評論
參考
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/99426.html
摘要:所有的塊語句都應當使用花括號包括花括號的對齊方式第一種風格第二種風格塊語句間隔第一種在語句名圓括號和左花括號之間沒有空格間隔第二種在左圓括號之前和右圓括號之后各添加一個空格第三種在左圓括號后和右圓括號前各添加一個空格我個人喜歡在右括號之后添 所有的塊語句都應當使用花括號, 包括: if for while do...while... try...catch...finally 3....
摘要:原文第一章主要介紹的大概情況基本語法。通過和來引用對象屬性或數組元素的值就構成一個表達式。 原文:https://keelii.github.io/2016/06/16/javascript-definitive-guide-note-0/ 第一章 主要介紹 JavaScript 的大概情況、基本語法。之前沒有 JavaScript 基礎的看不懂也沒關系,后續章節會有進一步的詳細說明...
摘要:編程書籍的整理和收集最近一直在學習深度學習和機器學習的東西,發現深入地去學習就需要不斷的去提高自己算法和高數的能力然后也找了很多的書和文章,隨著不斷的學習,也整理了下自己的學習筆記準備分享出來給大家后續的文章和總結會繼續分享,先分享一部分的 編程書籍的整理和收集 最近一直在學習deep learning深度學習和機器學習的東西,發現深入地去學習就需要不斷的去提高自己算法和高數的能力然后...
閱讀 3949·2021-11-22 13:53
閱讀 1676·2021-08-25 09:39
閱讀 2410·2019-08-29 18:36
閱讀 1469·2019-08-26 13:35
閱讀 1215·2019-08-26 11:57
閱讀 1678·2019-08-23 15:57
閱讀 803·2019-08-23 14:55
閱讀 1163·2019-08-23 14:51