原创 從一道題談 JavaScript 的事件循環

注:本篇文章運行環境爲當前最新版本的谷歌瀏覽器(72.0.3626.109) 最近看到這樣一道有關事件循環的前端面試題: //請寫出輸出內容 async function async1() { console.log('async1

原创 node.js的事件循環

在node中,事件循環表現出的狀態與瀏覽器中大致相同。不同的是node中有一套自己的模型。node中事件循環的實現是依靠的libuv引擎。我們知道node選擇chrome v8引擎作爲js解釋器,v8引擎將js代碼分析後去調用對應的node

原创 求衆數的JavaScript實現

給定一個大小爲 n 的數組,找到其中的多數元素。多數元素是指在數組中出現次數大於 ⌊ n/2 ⌋ 的元素。 你可以假設數組是非空的,並且給定的數組總是存在多數元素。 示例 1: 輸入: [3,2,3] 輸出: 3 示例 2: 輸入: [2,

原创 js鏈表的一個特別妙的實現

var i = 10, root = {index: "NONE"}, node = root;// 創建鏈表 while (i > 0) { node.next = node = new Object; node.index = i-

原创 原來console.log()還能這樣玩

如果給前端開發者最常用編程語句排名,console.log()一定名列前茅。但估計很多人對console.log()的認識還在只能簡單的打印文本信息而已。但其實console.log()還支持更多的用法。比如下面這樣: 它的實現很簡單:

原创 跳出預設,才能突破

最近被一個很小的問題困了兩天,事後想想不覺好笑,所以分享出來。 在用組件庫的能力做表單校驗的時候,我發現在觸發一次校驗後,後面表單就會自動校驗,這本來也正常,但我嘗試在校驗後卸載表單所在組件,初始化狀態,這時候表單應該就沒有自動校驗了,但詭

原创 關於(a==1&&a==2&&a==3)=true問題的思考

這裏考覈的其實是非嚴格相等運算符==的原理,下面是摘自MDN的解釋。 相等操作符比較兩個值是否相等,在比較前將兩個被比較的值轉換爲相同類型。在轉換後(等式的一邊或兩邊都可能被轉換),最終的比較方式等同於全等操作符 === 的比較方式。 相

原创 職責鏈模式

職責鏈模式的定義是:使多個對象都有機會處理請求,從而避免請求的發送者和接收者之間的耦合關係,將這些對象連成一條鏈,並沿着這條鏈傳遞該請求,直到有一個對象處理它爲止。 有這樣一個需求: 假設我們負責一個售賣手機的電商網站,經過分別交納500

原创 實現js中new的功能

首先看看new具有哪些功能: 創建一個對象,對象的原型指向構造函數的prototype。 構造函數裏的this指向的就是這個對象。 執行構造函數裏的語句。 但還要考慮一點,構造函數裏可以返回一個自定義的值,這個值es有這樣的規範: 遇上

原创 模板方法模式

模板方法模式是一種只需使用繼承就可以實現的非常簡單的模式。 模板方法模式由兩部分結構組成,第一部分是抽象父類,第二部分是具體的實現子類。通常在抽象父類中封裝了子類的算法框架,包括實現一些公共方法以及封裝子類中所有方法的執行順序。子類通過繼承

原创 使用迭代的方式實現flatten函數

寫一個flatten函數,實現扁平化數組的效果。比如: let arr = [1, 2, [3, 4, 5, [6, 7], 8], 9, 10, [11, [12, 13]]] 得到 flatten(arr)=[1, 2, 3, 4,

原创 隊列的JavaScript實現

隊列的結構特點 隊列是遵循FIFO(First In First Out,先進先出,也稱爲先來先服務)原則的一組有序的項。隊列在尾部添加新元素,並從頂部移除元素。最新添加的元素必須排在隊列的末尾。 隊列的js實現 可以用ES5和ES6兩種語

原创 集合的javascript實現

集合是由一組無序且唯一(即不能重複)的項組成的。這個數據結構使用了與有限集合相同的數學概念,但應用在計算機科學的數據結構中。ES6也有原生Set類的實現。集合李包含下面這些方法:has、add、remove、clear、size、value

原创 用享元模式寫一個文件上傳控件

享元(flyweight)模式是一種用於性能優化的模式,“fly”在這裏是蒼蠅的意思,意爲蠅量級。享元模式的核心是運用共享技術來有效支持大量細粒度的對象。 如果系統中因爲創建了大量類似的對象而導致內存佔用過高,享元模式就非常有用了。在Jav

原创 棧的javascript實現和棧的應用

棧數據結構 棧是一種遵從後進先出(LIFO)原則的有序集合。新添加的或待刪除的元素都保存在棧的同一端,稱作棧頂,另一端就叫棧底。在棧裏,新元素都靠近棧頂,舊元素都接近棧底。 Stack類的實現 一個棧應該具有這些方法:添加元素,移除元素,查