1. 程式人生 > 其它 >《重構》、《js高階程式設計》一些筆記知識點

《重構》、《js高階程式設計》一些筆記知識點

《重構(第2版) : 改善既有程式碼的設計》

1. 函式命名:以它“做什麼”來命名,而不是以它“怎麼做”來命名。

  •  一個改進函式名字的好方法:先寫一句註釋描述這個函式的用途,再把這句註釋變成函式的名字;

2. 每當看見一段程式碼在同時處理兩件不同的事,我就想把它拆分成各自獨立的模組,因為這樣到了需要修改的時候,我就可以單獨處理每個主題,而不必同時在腦子裡考慮兩個不同的主題。

  • 最簡潔的拆分方法之一,就是把一大段行為分成順序執行的兩個階段。
  • 你常能見到一些身兼多職的迴圈,它們一次做了兩三件事,不為別的, 就因為這樣可以只迴圈一次。但如果你在一次迴圈中做了兩件不同的事,那麼每當需要修改迴圈時,你都得同時理解這兩件事情。

3. 分解條件表示式

  • 在帶有複雜條件邏輯的函式中,程式碼(包括檢查條件分支的程式碼和真正實現功能的程式碼)會告訴我發生的事,但常常讓我弄不清楚為什麼會發生這樣的事。
  • 對於條件邏輯,將每個分支條件分解成新函式還可以突出條件邏輯,更清楚地表明每個分支的作用,並且突出每個分支的原因。

4. 將查詢函式和修改函式分離。

《JavaScript高階程式設計:第2版》

1. 檢測型別

  • 檢測基礎資料型別 typeof :String, Number, Boolean, undefined (typeof ss)
  • 檢測引用型別 instanceof : person instanceof Array/Object/RegExp(引用型別 instanceof Object 會始終返回 true,基本型別 instanceof Object 會始終返回 false)
  • 避免和 null 比較。改為 typeof / instanceof;如果是希望物件包含某個特定的方法名,則使用 typeof 確保指定名字的方法存在於物件上。
  • 程式碼中的null比較越少,就越容易確定程式碼的目的,並消除不必要的錯誤。

2. 訪問變數屬性

  • 點表示法:只可以使用字串 person.name
  • 方括號語法:可以使用變數 let ss=name; person[ss]
  • 通常,除非必須使用變數來訪問屬性,否則我們建議使用點表示法。

3. 所有物件都有 toLocaleString(), toString(), valueOf() 方法。

4. 重排序方法: reverse(), sort()

  • 預設情況下,sort() 按照升序排列陣列項。sort() 會呼叫每個陣列項的 toString() 方法,然後比較得到的字串並排序,即使陣列中的每一項都是數值,sort() 比較的也是字串。
  • 因此 sort() 可以接收一個函式作為引數,以便我們指定哪個值排在前面。

5. 在 javascript 中,沒有任何程式碼是立刻執行的,但一旦程序空閒則儘快執行。

  • 如設定一個150ms後執行的定時器不代表150ms後代碼立即執行,它表示程式碼會在150ms後被加入到佇列中。如果這個時間點上,佇列中沒有其它東西,那麼這段程式碼就會被執行,表面上看上去好像程式碼就在精確指定的時間點上執行了。其它情況下,程式碼可能明顯地等待更長時間才執行。

6. 函式節流背後的基本思想是指:某些程式碼不可以在沒有間斷的情況連續重複執行。

  • 函式節流在 resize 中最常用。

7. 變數和函式命名

  • 變數名應為名詞,如 car, person。
  • 函式名應該以動詞開頭,如 getName()。 返回布林型別的函式一般以 is 開頭,如 isEnable()。
  • 變數和函式都應該使用合乎邏輯的名字,不要擔心長度,長度問題可以通過後處理和雅俗來緩解。

8. 原生的方法比較快:只要有可能,使用原生方法而不是自己重寫一個。(原生方法是c/c++寫的,比js的快很多。

9. switch 語句較快:還可以通過將case語句按照出現概率從大到小來進一步優化 switch 語句。

10. 位運算子比較快: 可以選擇性地用位運算代替算術運算,如取模、邏輯與、邏輯或等。

11. map(), filter(), some(), every(), forEach() 都可以讓陣列的處理變得更簡單。

12. 解構賦值: 當一個物件字面量出現在等號左邊時,就認為它是一個解構賦值。

  • var [name, value] = ["color","red"];//一次給2個變數賦值
  • var value1 = 5; var value2 = 10; [value1, value2] = [value2,value1];//交換兩個變數的值