使用 IIFE 建立 Local Variable
為了讓 Function 的可讀性更佳,我們會在 Function 內建立 Local Variable,亦可使用 IIFE 與 Arrow Function 的 Parameter 取代。
失くすものさえない今が強くなるチャンスよ
為了讓 Function 的可讀性更佳,我們會在 Function 內建立 Local Variable,亦可使用 IIFE 與 Arrow Function 的 Parameter 取代。
IIFE 為 FP 的招牌菜,由於其獨特的 Lexical Scope,使其在 ECMAScript 有不少獨特應用。
ECMAScript 無論使用 Object Literal 或者 new
建立 Object,所有的 Property 都是 Public,也就是 ECMAScript 沒有 Field 概念,而 Encapsulation 算是 OOP 最基本原則之一,這也使得使用 ECMAScript 實踐 OOP 時有些許缺憾,本文使用 Closure 實踐 Encapsulation,並探討 Stage 3 的 Private Class Field 語法。
ECMAScript 2015 雖然支援了 Class,但沒支援 Private Field 始終是一大缺憾,目前 Private Field 已經在 Stage 3,在 Node 12+ 與 Vue 皆可使用。
若我們想找出 Array 中所有 Combination,可使用 flatMap()
與 slice()
實現。
splice()
是功能很強的 Method,可處理 Insert、Update 與 Remove,唯它是少數幾個會修改原本 Array 的 Method,須小心使用。
實務上有時會想將 整數
的最後幾位去除,是否有更簡潔的作法呢 ?
計算 N 次方,直覺都會想到使用 Math.pow()
,事實上還有其他 2 種方式。
雖然 ECMAScript 對於數字只有 Number,且本質是 Float,但人類的數字系統還是有 Integer 與 Float 之分,且 Float 轉 Integer 亦是實務上常見的需求。
Math.floor()
用來對 Float 無條件捨去成整數,若是正數可用 ~~
取代。
ECMAScript 提供了不少原生 Static Method,但我們也可將其抽成 Free Function 使其更符合 Functional 風格。
ECMAScript 的 Object 可當成 Key / Value 的 Container 使用,若想將 Function 的任意 Argument 變成 Key,這該如何實現呢 ?
對 Function 能否支援 無限 Argument
,一直是檢驗一個語言的指標。在 ECMAScript 5 提供了 arguments
Array-like Object;ECMAScript 2015 則提供了更好的 Rest Parameter 取代 arguments
。
除了使用 Promise.resolve()
與 Promise.reject()
建立 Promise 外,也可使用 Promise Constructor 建立 Promise,其 Argument 為 Executor Function,提供了 resolve()
與 reject()
,可用來建立 Fulfilled Promise 與 Rejected Promise。
ECMAScript 2015 的 Spread Operator 是很有創意的發明,讓很多操作都簡化成 ...
即可,且可讀性更佳。
若想自行建立 Rejected Promise,ECMAScript 提供了三種方式。
若想自行建立 Fulfilled Promise,ECMAScript 提供了三種方式。
有了 Promise 後應盡量避免使用 Nested Callback,但並不表示 Nested Promise 也不好,有些需求剛好適合 Nested Promise。
ECMAScript 行尾要不要加 Semicolon 一直是很爭議的議題,傳統都會加上 ;
,但最近則發現越來越多 Project 都不加,如 Vue、Redux … 等,到底 ASI 是什麼 ? 行尾不加 ;
會有什麼問題嗎 ?
由於 Promise 是 Asynchronous,因此回傳時間不確定,若想實作出超過指定時間就 Timeout,可使用 Promise.race()
實作。
Promise.all()
處理 Promise Array 時,必須所有的 Promise 為 Fulfilled 才行,只要有一個 Promise 為 Rejected 就會失敗,若想有幾個 Fulfilled 就顯示幾個,而放棄 Rejected,就得使用 Promise.allSettled()
。
Promise 由於是 Asynchronous 產生速度有快有慢,可使用 Promise.all()
等所有 Promise 都 Fulfilled 後包成單一 Promise。
Partial Application 是當 Function 提供不足 Argument 時,會回傳以剩下 Argument 所構成的新 Function,這種看似神奇的概念,事實上 bind()
就能實現。
Array.prototype.fill()
為 ECMAScript 2015 才新增的 Method,可一次改變 Array 內多個 Element,也因此特殊功能,因而推導出一些獨特應用。
Recursion 為 FP 中重要的一支,亦可使用其實現 reduce()
。
Recursion 為 FP 中重要的一支,亦可使用其實現 filter()
。
Recursion 為 FP 中重要的一支,亦可使用其實現 map()
。
JSON.stringify()
可將 object 轉成 JSON String,若要將 JSON String 轉成 Object,則可使用 JSON.parse()
。
寫入 Object 的 Property 為處理 Object 必備功能,本文整理出 5 種寫入 Property 方式。
讀取 Object 的 Property 為處理 Object 必備功能,本文整理出 5 種讀取 Property 方式。
JSON.stringify()
能將 Object Literal 轉成 JSON String,但單純 String 並不容易閱讀,是否能讓 Property 間也有縮排呢 ?
若我們想將 Object 方便傳輸或儲存,可使用 JSON.stringify()
將 Object 轉成 JSON String。
實務上有時候會想將 String 轉成 Char Array 做進一步處理,ECMAScript 提供了 4 種方式轉換。
有些語言有 Infinite Array 概念,透過 ECMAScript 2015 的 Generator,我們也能實作出此概念。
ECMAScript 是 Mutl-paradigm 語言,因此存在多種不同風格寫法,統一程式碼風格有助於團隊合作。
ECMAScript 提供 3 種方式手動轉型成 Boolean。
ECMAScript 只有 Primitive 為 Immutable,Object 則為 Mutable;若要連 Object 也 Immutable,則要使用 Object.freeze()
。
ECMAScript 所提供的多半以 prototype
的 Method 形式,可藉由本文手法將 Method 轉成 Function 使用。
substring()
與 slice()
都可回傳部分 string,若 End Index 使用 負數
,則兩者有重大差異。
ECMAScript 的 String.prototype
亦提供 slice()
取得部分 String,且以 OOP 形式提供。