整理這些技術筆記真的很花時間,如果你願意 關閉 Adblock 支持我,我會把這份感謝轉換成更多「踩坑轉避坑」的內容給你!ヽ(・∀・)ノ
JavaScript 核心觀念(13)-運算子、型別與文法-動態型別
前言
當我們在轉寫 JavaScript 的時候,完全不用去宣告該變數是什麼型別,而這主要原因在於 JavaScript 是一個動態型別的語言。
動態型別
何謂動態型別呢?這邊舉例 C 語言的宣告變數,當假使今天要宣告一個 int 數字類型的變數,那麼就要像以下這樣宣告
1 | |
而字串呢?在 C 語言中字串是使用 char 宣告(C 語言中字串是採用陣列形式呈現)
1 | |
而 JavaScript 呢?在上述範例中 JavaScript 在執行階段就會自己辨別賦予正確的型別
1 | |
在這邊我們可以透過 typeof 來確定型別
1 | |
而這邊 JavaScript 也有所謂的型別轉換,例如原本的 string 變成 number
1 | |
因此 JavaScript 有兩個很危險的陷阱,也就是顯性的轉換(Explicit conversion)以及隱性的轉換(Implicit conversion)。
當我們無法確定型別時,其實在開發時會有很嚴重的問題發生,也就是 bug,我們會無法確認變數的型別,而顯性的轉換簡單來講就是你可以看到的轉換,以上面的範例來講,我們從程式碼可以推斷出它轉換成了 number 接下來又因為重新賦予值轉換成 string,這就是所謂的顯性轉換。
而隱性的轉換呢?簡單來講當你不確定 JavaScript 規則時,就很容易發生這種狀況,例如最常見的問題
1 | |
通常來講我們可能會認知為 2,但是相信你看這一篇文章應該會疑惑 number 要怎麼跟 string 相加?因此這時候 JavaScript 就會很雞婆的依照一些規則幫你做型別轉換,例如加號運算子的規則是當「number 遇到 string 時,number 會被轉換成 string」,因此 a + '1'; 會變成 11,並且是一個字串。
1 | |
而這就是所謂的隱性轉換。
當我們可以理解這些規則後也就可以避免一些開發上的 bug。
參考文獻
整理這些技術筆記真的很花時間,如果你願意 關閉 Adblock 支持我,我會把這份感謝轉換成更多「踩坑轉避坑」的內容給你!ヽ(・∀・)ノ