整理這些技術筆記真的很花時間,如果你願意 關閉 Adblock 支持我,我會把這份感謝轉換成更多「踩坑轉避坑」的內容給你!ヽ(・∀・)ノ
JavaScript 核心觀念(7)-執行環境與作用域-not defined VS undefined
前言
not defined 以及 undefined 也是 JavaScript 中相當重要的觀念,若可以搞懂這兩者的差異,對於 debug 上是非常有幫助的。
not defined
在前面章節中我們知道 JavaScript 有一個所謂的提升(注意,JavaScript 實際上並沒有這個東西,這只是為了釐清 JavaScript 的一種說法。),因為有這個狀況的發生,所以當我們在宣告變數之前呼叫變數是只會出現 undefined。
1 | |
而 not defined 是如何發生的呢?只需要將 var a = 'Ray'; 註解即可。
1 | |
因此我們可以了解到 not defined 的意思是這個「變數或函式未定義」。
當我們在開發時若出現 XXX not defined 就代表你變數或函式忘記宣告啦~~
undefined
undefined 在前面已經講過很多次了,undefined 是屬於一個特殊關鍵字,通常會發生在提升的時候,因此在這邊有一個重點要補充。
千萬不要針對變數給予 undefined,因為在 JavaScript 中是允許你這樣做的(WTF?)
1 | |
當若你使用 undefined 當作一個值來使用,那麼你就很容易導致自己在開發以及 Debug 的困擾,因為你根本不知道變數到底被賦予值了沒有,因此若你真的想要賦予變數一個初始空值,那就會建議你使用 null,null 就是字面上翻譯空值的意思,使用這個方式來賦予空值,會比你使用 undefined 當作初始值來的好太多,也可以避免你被請出門喝咖啡。
但是這邊額外講一下 null 並不能等於 '' 空字串,因為這兩者在 JavaScript 中是不同的東西,因此不能拿來做比較
1 | |
這時候我們也可以使用 typeof 來查看為什麼會不能相等以及各自型別是什麼
1 | |
null 會顯示 object 這個原因是 JavaScript 長久以來的 Bug,也因為 JavaScript 已經這樣子運行很久了,若隨意修正這個 Bug 可能會發生全世界的網站都掛掉的問題,所以這個 Bug 才會一直存活在 JavaScripr 中。
最後除了不要將 undefined 當作變數的值之外,也千萬不要拿來當作變數名稱使用,因為 JavaScript 是允許你這樣做的,但並不能正常運作。
1 | |
所以 undefined 的重點有兩個,不要當作變數屬性以及當作變數名稱使用,否則你會被請出去喝咖啡。
參考文獻
整理這些技術筆記真的很花時間,如果你願意 關閉 Adblock 支持我,我會把這份感謝轉換成更多「踩坑轉避坑」的內容給你!ヽ(・∀・)ノ