10個助你成為專業前端程式設計師的JavaScript知識點

你會聽到許多人抱怨JavaScript很奇怪,有時甚至毫無價值。人們這樣抱怨是因為他們不瞭解事情的本質。

雖然我同意JavaScript中有些場景的處理方式不同,但這並不會使它變得奇怪,而是以它自己的方式變得很漂亮。

要開始熱愛一門程式語言,你應該從深入瞭解並逐個掌握它的概念開始。

為了成為一個全面的JavaScript專家,下面有36個你需要掌握的JavaScript概念。

雖然這是我最長的文章之一,但是我向你保證它是值得你去花時間看的。在此感謝Stephen和Leonardo提供的資源。

參考資料在Leonardo的一個GitHub倉儲中(地址:https://github。com/leonardomso/33-js-concepts),其中包含了下面解釋的所有這些概念的學習材料。請花點時間理解下面提到的每一個概念。

1、呼叫棧執行

每個人都聽說過Stack Overflow這個網站。但是你知道實際的堆疊溢位嗎?堆疊溢位是與呼叫堆疊的操作相關聯的錯誤。

透過理解堆疊呼叫,你將瞭解像JavaScript這樣的高階語言是如何執行的。

2、原始資料型別

const foo = “bar”;foo。length; // 3foo === “bar”; // true

等等!

當你把字串bar賦值給常量foo時,foo是基本字串型別。這是每個人都可以接受的。但是為什麼可以訪問字串型別的length屬性呢?

是不是很奇怪。

這個特性稱為自動裝箱。在上面的示例中,JavaScript將常量包裝到一個臨時包裝器物件中,然後訪問該物件的length屬性。一旦這一步完成,物件將被安全地丟棄。

透過深入瞭解基本資料型別,你將知道它們在二進位制表示之前是如何在記憶體中儲存的。你也會知道這些“奇怪”的情況是如何發生的,以及它們背後的邏輯原因。

3、值型別和引用型別

最近,我對“透過引用傳遞”的概念在JavaScript中的工作方式有些困惑。雖然我知道C和Java等語言中“按引用傳遞”和“按值傳遞”的概念,但我不確定它在JavaScript中是如何工作的。

你知道在JavaScript中,給一個變數賦一個非基本型別的值,實際上是賦了一個該值的引用嗎?引用指向了儲存值的記憶體位置。

var arr1 = [1,2,3];var arr2 = arr1;arr2。push(10);console。log(arr2);//[1, 2, 3, 10]console。log(arr1);//[1, 2, 3, 10]

正如你從上面的示例中看到的,對arr2所做的任何修改也將反映在arr1上。這是因為它們只持有對值的引用,而不是實際值本身。

透過理解值型別和引用型別的概念,你將更好地理解變數是如何分配值和記憶體引用的。

4、強制型別轉換

這一概念主要解釋了隱式和顯式強制型別轉換的區別。這是在用JavaScript時會出錯的少數領域之一。對於隱式型別轉換的概念尤其如此,因為對於不同的資料型別,它的行為方式不同。

這是JavaScript面試中最常被面到的內容之一。

Number(‘789’) // 顯式轉換+‘789’ // 隱式轉換789 != ‘456’ // 隱式轉換9 > ‘5’ // 隱式轉換10/null // 隱式轉換true | 0 // 隱式轉換

透過清楚地理解型別轉換,那你已經瞭解了JavaScript最棘手的概念之一。

5、相等比較和’ typeof '運算子

這個概念基本上解釋了雙等號和三等號的使用,以及在何時為什麼使用它們。儘管在表面上看它們是相同的,並且在大多數時候會得出相同的結果,但是如果你在不知情的情況下使用它們,它們可能會給你帶來意想不到的錯誤。

你還應該能夠使用typeof運算子並知道輸出的可能性。但是當有物件時,它會讓人感到困惑。

typeof 3 // “number”typeof “abc” // “string”typeof {} // “object”typeof true // “boolean”typeof undefined // “undefined”typeof function(){} // “function”typeof [] // “object”typeof null // “object”

6、JavaScript作用域

作用域是一個概念,我相信,它在你JS旅程的開始階段你就應該瞭解他。根據Wissam的說法,作用域的簡單定義是,當編譯器需要變數和函式時,它就是查詢這個變數和函式的地方。

理解作用域將允許你更有效地使用JavaScript。你應該瞭解全域性作用域、塊和函式作用域,也稱為詞法作用域。

JS作用域一開始可能會讓人很困惑,但是一旦你理解了它是如何工作的,使用它會非常令人興奮。

7、語句和表示式

這是JavaScript中的兩個主要語法類別。你應該知道這兩者之間的區別以及語句是如何計算的。這將允許你全面瞭解程式碼是如何被構造成表示式和語句的。

你會注意到,你的大部分程式碼都是表示式,而相對而言,你使用的語句數量較少。你還可以避免由於不正確使用這兩種方法而導致的錯誤。

8、 立即呼叫函式表示式和模組

立即呼叫的函式表示式是定義後立即執行的函式。它們主要用於避免汙染全域性作用域。

後來,ES6模組被引入,提供了一種避免全域性作用域汙染的標準方法,儘管有些人認為它不是IIFEs的直接替代品。

透過理解IIFEs和模組,你在開發應用程式中,可以遇到更少的由於全域性作用域處理不當而導致的錯誤。然而,使用模組,你可以做很多事情。

9、 訊息佇列和事件迴圈

正如MDN文件所說,JavaScript有一個基於事件迴圈的併發模型,它負責執行程式碼、收集和處理事件以及執行排隊的子任務。這個模型與其他語言(如C和Java)中的模型有很大的不同。

在上述併發模型中,訊息佇列用於處理從最老的訊息開始的訊息。只要事件發生,並且有一個事件監聽器監聽它,訊息就會被新增到佇列中。

透過理解這些概念,你可以更好地理解JS在底層是如何工作的,以及如何解釋你的程式碼。

10、時間間隔

要在JavaScript中排程一個呼叫或函式,可以使用兩種方法。

setTimeout允許我們在特定的時間間隔後執行函式一次。

setInterval允許我們重複執行一個函式,在特定的時間間隔後開始執行,然後在該時間間隔內連續重複執行。

這些與前面的訊息佇列和事件處理程式的概念有些關聯。因此,透過理解時間間隔方法,我們可以理解它們是如何工作的,並在我們的用例中有效地使用它們。