[小菜一碟] 在 JavaScript 依照 Resolve 的順序處理 Promise

在 JavaScript 的 Promise API 中,要處理一個 Promise 的集合,有 Promise.all()、Promise.any()、…等等,可是這些 API 要嘛要等全部的 Promise 都完成了,要嘛是任一個,而且只有一個 Promise 完成了,才能串接後續的處理,沒有那種依照完成的先後順序一個接一個串接後續處理的 API,不過沒關係,利用 Promise 的特性,我們也是能做到類似的效果。

...繼續閱讀 »

[小菜一碟] 如何依據網頁內容變換網址但不必重新整理網頁

自從 AJAX 問世之後,由於節省頻寬、提升網頁回應速度的效果顯著,被大量採用,甚至發展出了 SPA,但是這樣反而出現了一個副作用,就是我們無法將網頁最終呈現的結果透過 URL 分享出去,不利於 SEO,我們就來看一下,怎麼在都是用非同步請求取得網頁內容的情況下,變換網址。

...繼續閱讀 »

[小菜一碟] 在 JavaScript 的 Array.prototype.forEach() 方法實現 continue; 及 break; 的效果

眾所皆知,在 JavaScript 中的 Array 有一個 forEach() 方法很好用(而且 IE 9 以上有支援),大部分的使用情境都可以用來取代傳統的 for 語法,但難免會有需要 continue 或 break 的場景,continue;break; 在 forEach() 方法中是不會有作用的,我們需要換個方式來做。

...繼續閱讀 »

[料理佳餚] 拐個彎的 JavaScript 的私有欄位(Private Field)

這天,我想要在 JavaScript 的 Class 中加入一個私有欄位(Private Field),用來封裝建構式傳入的參數,以提供給唯讀屬性使用,爬文研究之後發現,雖然 JavaScript 有定義私有欄位的語法,但它是實驗性質的功能,不一定每個瀏覽器都有支援,至少目前為止 Firefox 就完全不支援,所以我得拐個彎了。

...繼續閱讀 »

[小菜一碟] 極省!用 WebMarkupMin 讓網站流量再節省那麼一點

一般我們如果打造的系統是給企業內部使用的話,走的是 Intranet,大概不會有程式設計師會去在意網路流量,當應用場景搬到了 Internet,流量成為企業經營成本的時候,那可是能省則省,因為在網際網路上大多數的內容,觀看者是沒有直接為這些內容付費的,成本當然能少一點是一點,這篇文章就要來介紹 WebMarkupMin 這個套件,將我們的 HTML 內容做最小化,減少不必要的傳輸流量。

...繼續閱讀 »

[料理佳餚] 用 Jasmine 撰寫一個 JavaScript 的單元測試

對我來說寫測試有一個很大的目的就是「保護既有已完善的程式碼」,我開發的 jQuery 擴充套件 - jquery-model 已經被我們團隊成員接受並廣泛使用,為了保護自己也保護他人,是時候為它投入一些時間架設防護網,而 JavaScript 的單元測試框架有好幾款,我選擇了 Jasmine,為啥呢? 因為它在官網的 GETTING STARTED 頁面就告訴我如何用 STANDALONE 的發行版本來引用 Jasmine,僅此而已。

 
...繼續閱讀 »