如何使 Function 存取自訂 Property ?
ECMAScript 可動態建立 Property,而 Function 本身亦是 Object,若想在 Function 內存取自己的 Property,直覺會使用 this
,但事實上並非如此。
失くすものさえない今が強くなるチャンスよ
ECMAScript 可動態建立 Property,而 Function 本身亦是 Object,若想在 Function 內存取自己的 Property,直覺會使用 this
,但事實上並非如此。
ECMAScript 5 無論是 Function Declaration 或 Anonymous Function,都可以使用 this
搭配 call()
、apply()
與 bind()
動態改變 this
,ECMAScript 2015 支援了 Arrow Function 後,這對原本的 this
、call()
、apply()
與 bind()
有任何影響嗎 ?
實務上某些 Function 會傳入 Array.prototype.forEach()
,但我們只想執行一次而已,如符合條件就只執行一次,其餘僅管符合條件,但都不執行,我們該怎麼做呢 ?
當 Callback 使用 for
Loop 中 var
所設定的 Counter 時,一不小心就會出乎我們預期。
ECMAScript 提供眾多的 Higher Order Function,如 Array.prototype.forEach()
,當我們將 Callback 傳入後,且該 Callback 含有 this
想讀取 Object 的 Property 時,就會出現錯誤,該怎避免這個常見的問題呢 ?
Closure 是 ECMAScript 代表性功能,也是 Functional Programming 基礎,很多神妙的 FP 機制都是由 Closure 展開,善用 Closure 將使得程式碼更為精簡,可讀性更高,也更容易維護。
Closure 是 ECMAScript 的一大特色,但由於對其不了解,因此很多人不敢使用 Closure;或者雖然會使用 Closure,但仍然對其原理一知半解。本文以 Runtime 角度深入探討 Closure 底層機制,讓我們徹底了解 Closure 的黑魔法。
Pipeline Operator 是非常令人期待功能,將完全改變 ECMAScript 寫法, 目前還在 Stage 1,透過 Babel 的 Plugin,我們可在 Quokka 提早測試 Pipeline Operator。
Optional Chaining 是 ECMAScript 非常令人期待功能,目前已經在 Stage 3,透過 Babel 的 Plugin,我們可在 Quokka 提早測試 Optional Chaining。
若從其他程式語言跳來學習 ECMAScript,最不習慣應該就是 ECMAScript 有大量 Asynchronous 概念,如在 For
Loop 中使用 setTimeout()
算是 ECMAScript 前十大坑之一。
Promise 有 Fulfilled Promise 與 Rejected Promise 兩種,其中 Fulfilled Promise 可由 Promise.resolve()
建立;而 Rejected Promise 則須由 Promise.reject()
或 Throw
建立。
實務上有些邏輯在 Fulfilled Promise 與 Rejected Promise 都需被執行,導致 Fulfilled Handler 與 Rejected Handler 都寫了一份,此時可使用 ECMAScript 2018 的 finally()
與 try catch finally
,只需寫一份邏輯即可。
若為 Fulfilled Promise,我們可用 then()
或 await
去獲得 Synchronous 資料;但若為 Rejected Promise,則有 then()
、catch()
或 try catch
三種處理方式。
ECMAScript 2015 的最大亮點之一就是提出 Promise 這種 未來值
概念避免 Callback Hell,先有 2015 的 then()
,後有 2017 的 await
,都可用來取得 Promise 內的 Synchronous 資料。
Fulfilled Promise 除了可由 Promise.resolve()
建立外,也可由 ECMAScript 2018 的 async
宣告,此外 Promise.resolve()
還能將 jQuery 的 Thenable Object 轉成真正的 Promise。
在 FP 我們會使用 Currying Function 取代傳統 Multiple Argument Function,但若回傳為 Promise,還能繼續使用 Currying 嗎 ?
ECMAScript 5 的 Property Accessor 提供了 Bracket Notation 可使用 []
存取 Property,這使得 Property 可以使用 Variable;而 ECMAScript 2015 更加碼提供 Computed Property Name,讓我們在建立 Object 時就能使用 []
。
ECMAScript 對 Asynchronous 支援比其他語言先進,從最基本的 Callback 演進到 ECMAScript 2105 的 Promise,再演進到 ECMAScript 2017 的 async await
。
由於 ECMAScript 是 Single Thread 語言,對於繁重的運算動作,就無法使用 Multi Thread 解決,因此 Asynchronous 在 ECMAScript 格外重要。Browser 使用獨特的 Event Loop Model 實現 Asynchronous,要能徹底了解其背後運作原理,才能掌握 ECMAScript 的 Asynchronous Function。
一般 Destructuring 都用在 Array 與 Object,事實上也能用在 Iterable 上。
ECMAScript 2015 提供了很有創意的 Array Destructuring,原本需要好幾行才能完成的寫法,最後只需一行就能解決。
初學者常直覺將 Object 如 String 以 +
合併,但 Object 須以特殊方式才能合併。
=
只能 Copy Object 的 Reference,而非真正 Clone Object,本文整理出 4 種方式,並詳細分析其特色。
若 Function 有 n 個 Argument,但實際 Data 卻為 n 個 Element 的 Array,當然可將 Array 一一拆解傳進 Function,但有更精簡寫法。
初學者常直覺將 Array 如 String 以 +
合併,但 Array 需以特殊方式才能合併。
=
只能 Copy Array 的 Reference,而非真正 Clone Array,本文整理出 4 種方式,並詳細分析其特色。
ECMAScript 是大量使用 Callback 的語言,實務上我們常想針對 Callback 加以 console.log()
協助 Debug,該如何優雅地使用 console.log()
呢 ?
ECMAScript 2015 提供了很有創意的 Object Destructuring,原本需要好幾行才能完成的 Code,只需要一行就能解決。
ECMAScript 有個很有趣特性:Generic Method 可被其他型別透過 call()
使用,宛如自己的 Method 一般,這種 借用 Method
特性,使得該型別也擁有其他型別能力。
ECMAScript 雖然是 Dynamic Type Language,但並不代表 Variable 沒有 Type,只是其內建獲得 Type 方法包含太多 驚喜
,成為備受爭議部分。本文整理出 4 種獲得 Type 方式,各有其優缺點,最後自訂 typeof_()
,可判斷各種 Type。
實務上常會遇到 Array 雖有重複資料,但我們並不希望顯示重複部分,這個常見需求,該如何使用 ECMAScript 實現呢 ?
大家在學習 ECMAScript 時,是否覺得跟主流 OOP 程式語言不太一樣?為什麼沒有 Interface?為什麼很難使用 OOP Design Pattern ?為什麼我會從很討厭 ECMAScript 到很喜歡 ECMAScript?這要從其本質談起,因為我發現了其可愛一面。