TC39-遠不只是JavaScript的創世神

TC39是什麼

用他們自己的介紹。

TC39是由JavaScript的開發者、制訂者、學者等等組成的,通過跟社區的合作來維護並發展JavaScript的組織。而JS的創造者自然是TC39中的一員。當然都是幫他填坑的^_^。

工作內容就是在Github上制訂JavaScript(實際上是 ECMAScript)的規範,並且每兩個月會開會來討論提案。

實際上JavaScript的新規範從開始構想到最後落地在TC39的流程裡有5個階段 從 stage-0 到 stage-4 。比如我們想在babel裡變使用 js decorator (就是有名的狀態管理框架mobx大量使用的語法),在沒有配置好babelrc的情況下會出錯,這時候就需要指明支持stage-2 因為現在 js decorator 也就是 class 裝飾器還在 stage-2 的階段。

js新特性的進度

js的版本,es6,es7,es8,es10,es2015,es2017等等,確實比較亂。對於我而言目前來說es2015也就是es6是一個很重要的階段。再往後當然有很重要的特性比如 async/await 我印象中是es7的,就記不清容易混亂了。所以就傾向於把js特性所在的stage階段記下就好了。基本到了stage-3就差不多定稿了。之前的話還是有使用風險的。

stage-0 'Strawperson' (稻草人的意思^_^)

stage-1 'Proposal' (提議) 簡單說是要有一些案例,對解決方案有一個大致的形狀,要明確潛在的挑戰。

stage-2 'Draft' (草案) 要用正式並且詳細的語言詳細的描述語法和語義。

stage-3 'Candidate' (候選) 通過用戶和實際案例的反饋繼續精煉。

stage-4 'Finished' (結束) 新特性已經準備好採納進ECMAScript標準了。

具體見官方鏈接,有非常詳細的每個階段該到什麼程度的描述。

<code>https://tc39.es/process-document/\t/<code>

空值合併運算符 Nullish Coalescing

這是最近剛進入stage-4的一個提案,2018年開始進入stage-2的討論階段。2019年末順利進入stage-4,期間因為各種寫法變化有過討論。 最後定稿為 ?? 沒錯,就是兩個問號。這是一個對於業務代碼來講非常實用的功能。

JavaScript 裡的 空 會讓新手和其他語言轉來的人非常鬱悶。null , undefined , 0 , '' 。他們之間的 == 運算結果往往出人意料啊。

對於寫業務代碼前後端交互的時候,判斷空值來選擇性顯示結果的時候往往會這麼做

<code>const forDisplay = response.data || 'there is no message' // 0 || 'message' => 'message'/<code>

但是 假如 response.data 結果是 0 並且 這個 0 其實是一個 有意義的 (比如金錢)0 的概念,顯示no message 就會產生邏輯判斷的錯誤。所以很多框架都是自己寫空的判斷。

<code>const forDisplay = response.data ?? 'there is no message' // 0 ?? 'message' => 0/<code>

這樣做 '' 和 0 就不會被當作空 , 以防業務判斷上的錯誤。

本質上就是對 undefined 和 null 做了合併處理。

Optional Chaining

這也是一個剛進入stage-4的一個提案,它的大部分使用場景跟 ?? 比較接近。叫選擇鏈?好像有些怪,先不翻譯了。

在前後端的交互中,想要的結果往往是被嵌套的,普遍在第三層。那麼這裡就有了一個判斷的問題。

<code>const message = res.result.message // 如果 後端因為空的關係 沒有 result這個屬性,這段代碼就會報錯
const message = res.result && res.result.street; //所以往往會這麼寫,先保證有result這個屬性再取值/<code>

有了 Optional Chaining 可以這樣進行簡化

<code>const message = res.result?.message // 如果沒有result屬性則返回 undefiend
const message = res.result?.['message'] //也可以這麼做,這裡不能省略掉 . 請注意/<code>



野碼無韁 , 代碼雖講究優雅 , 還是服務於功能 。


TC39-遠不只是JavaScript的創世神


分享到:


相關文章: