SegmentFault 思否技術週刊 Vol.46 -- JavaScript 的那些事

Beverly發表於2022-05-31

JavaScript 是一門基於原型、頭等函式的語言,是一門多正規化的語言,它支援物件導向程式設計,指令式程式設計,以及函數語言程式設計。它提供語法來操控文字、陣列、日期以及正規表示式等,不支援 I/O,比如網路、儲存和圖形等,但這些都可以由它的宿主環境提供支援。

知識進階

《JS阻塞渲染,這麼多年我理解錯啦?》

在中文社群,這麼多年一直流傳一個說法:JS執行緒負責執行JS,GUI渲染執行緒負責渲染,這兩者是互斥的,所以JS執行時會阻塞渲染。

但隨著Dev Tools使用的增多,逐漸開始懷疑以上說法。本文會以實際案例來解釋為什麼JS阻塞渲染。

《JavaScript 之原型、原型鏈》

其他程式語言如 Java 等使用 new 命令時,都會呼叫“類”的建構函式。但是,JavaScript沒有“類”,本身並不提供一個 class 實現(雖然在ES6中提供了class 關鍵字,但其只是語法糖,JavaScript仍然是基於原型的)。於是,JavaScript作了一個簡化的思想,new 命令後面跟的不是類,而是建構函式,用建構函式生成例項物件,但其缺點是無法共享屬性和方法。於是,就為建構函式設定了一個 prototype 屬性,這個屬性包含一個物件(prototype物件)。所有例項物件需要共享的屬性和方法都放在這個物件裡,那些不需要共享的屬性和方法就放在建構函式裡。

《JavaScript Promise 的理解和使用》

什麼是Promise?
Promise怎麼用?

《5個一定要學會的JavaScript新特性》

JavaScript 在不斷地升級迭代,越來越多的新特性讓我們的程式碼寫起來變得簡潔有趣,這篇文章會介紹5個新特性,一起研究一下吧。

《你可能不瞭解的 Promise 微任務型別》

ECMA 規範中把 Promise 微任務分成了 NewPromiseReactionJob 和NewPromiseResolveThenableJob 兩種型別,下面結合規範來分別看下這兩種微任務的產生時機和執行內容。

《JavaScript閉包》

在 JavaScript 中閉包描述的是 function 中外層作用域的變數被內層作用域引用的場景,閉包的結構為內層作用域儲存了外層作用域的變數。

本文將帶你用正確姿勢看待JavaScript閉包。

《JavaScript記憶體洩漏》

在傳統的網頁開發時無需過多考慮記憶體管理,通常也不會產生嚴重的後果。因為當使用者點選連結開啟新頁面或者重新整理頁面,頁面內的資訊就會從記憶體中清理掉。

隨著SPA(Single Page Application)應用的增多,迫使我們在編碼時需要更多的關注記憶體。因為如果應用使用的記憶體逐漸增多會直接影響到網頁的效能,甚至導致瀏覽器標籤頁崩潰。

這篇文章,我們將研究JavaScript編碼導致記憶體洩漏的場景,提供一些記憶體管理的建議。

《JS中的塊作用域和遮蔽效應》

JS中的程式碼塊是什麼?
塊級作用域是什麼?
遮蔽效應是什麼?
非法遮蔽是什麼?
塊級作用域和詞法作用域

應用實踐

《js 生成UUID的幾種方法》

UUID(Universally Unique IDentifier) 全域性唯一識別符號。
UUID是一種由演算法生成的二進位制長度為128位的數字識別符號。UUID
的格式為“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”,其中的 x 是 0-9 或 a-f
範圍內的一個32位十六進位制數。在理想情況下,任何計算機和計算機叢集都不會生成兩個相同的UUID。

《js陣列去重常見的七種方法》

filter() 方法建立一個新的陣列,新陣列中的元素是通過檢查指定陣列中符合條件的所有元素。item是當前元素的值,index是當前元素的索引值。indexOf() 方法可返回某個指定的字串值在字串中首次出現的位置。利用indexOf() 查詢到陣列的下標,看是否等於當前的下標,相等的話就返回,否則不返回值。

《JavaScript深拷貝的幾種方法》

淺拷貝是建立一個新物件,這個物件有著原始物件屬性值的拷貝。如果屬性是基本型別,拷貝的就是基本型別的值,如果屬性是引用型別,拷貝的是記憶體地址 。如果不進行深拷貝,其中一個物件改變了物件的值,就會影響到另一個物件的值。
深拷貝是將一個物件從記憶體中完整的拷貝一份出來,從堆記憶體中開闢一個新的區域存放新物件,且修改新物件不會影響原物件。

《js 資料型別轉換的幾種方式》

強制型別轉換 String(),toString() 轉字串型別
字串轉數值型別 Number parseInt()
字串轉陣列split,陣列轉字串join
.......

《JavaScript的幾種繼承方式》

JavaScript的幾種繼承方式
原型鏈繼承
藉助建構函式繼承(經典繼承)
組合繼承:原型鏈 + 借用建構函式(最常用)
原型式繼承 (Object.create)
寄生式繼承
寄生組合式繼承(最理想)
ES6中的繼承

《讓你事半功倍的 JS utils工具函式》

今日分享一篇積累和收集了很久的JS utils工具函式,文章程式碼量較多,建議收藏起來慢慢看,當哪一天需要用到的時候,開啟你塵封已久的收藏夾,相信能讓你的業務程式碼開發事半功倍。
彙集了時間相關,DOM相關,URL相關,判斷相關,圖片相關,快取相關等。部分邏輯處理較為簡單,如果是業務量較為複雜的情況建議要斟酌使用,但對於大部分的專案應該是綽綽有餘。接下來就進入程式碼部分吧~

《2022年的JavaScript開發工具》

編譯器負責將輸入程式碼轉換為某種目標輸出格式。出於我們的目的,我們關注的是那些支援將現代 JavaScript 和TypeScript 轉換成特定版本的 ECMAscript 的編譯器,這些 ECMAscript 相容瀏覽器和最新版本的 Node.js。

《手動實現一個JS執行引擎》

支援解析js指令碼生成語法樹、格式化程式碼
支援執行完整js指令碼
支援安全模式執行單行表示式
支援設定超時時間

《js獲取頁面尺寸》

在大多數情況下,document.documentElement.clientWidth 都能返回正確的值, 但在IE6的quirks模式中,document.body.clientWidth返回正確的值,所以要做相容處理。另外clientWidth 和 clientHeight 都是隻讀屬性,不能對它們賦值。

面試真題

《js面試題(基礎)梳理》

JavaScript有幾種資料型別?
JavaScript最大安全數字與最小安全數字?
深拷貝與淺拷貝的區別?
閉包是什麼?

《js面試題(進階)梳理》

undeclared 與 undefined的區別?
let & const與 var 的區別?
獲取DOM元素有哪些方法?
操作DOM元素有哪些方法

熱門問答

課程推薦

《前端大資料視覺化實戰》

相信從事前端開發人員還是對於html,css,javascript,Browser等等有一定認識瞭解的。但是瞭解的程度如何呢? 知道含義?簡單/熟練使用?深入研究?
請大家試著回答我下面幾個問題:

頁面編寫是否更多還停留在 div 套 div ?樣式編寫更多還是寬,高,定位?
JavaScript 是否深入瞭解過? javascript 為什麼是單執行緒呢?(設計初衷?受限原因?)
JavaScript 在 Browser (瀏覽器)中如何執行的? 如何編譯的?( 預編譯?即時編譯? )
在前端領域內自己是否有專注的一個方向?或者說是找工作的殺手鐗?

試著解答過後或許結果並不是那麼理想,結果如何沒有太大關係,個人認為有問題不可怕,及時發現問題就是好的結果。對於每個人來說都不是萬能的,是需要時刻學習,時刻進步的。

課程收穫:

  • 掌握一項隨處可見、日益增加的技術需求
  • 提升自身技術,拓寬前端視野
  • 加強硬實力,把握晉升機會
  • 基於計算機底層,向前端架構邁進

PS:大家想看哪些方面的技術內容,可以在評論區留言喔 ~
如有問題可以新增小姐姐微信~
image.png

相關文章