前言
not defined 以及 undefined 兩者的差異釐清後,對於 debug 上是非常有幫助的
not defined
在前面章節中我們知道 JavaScript 有所謂的提升,因為有這個狀況的發生,所以當我們在宣告變數之前呼叫變數是只會出現 undefined
console.log(a); // undefined
var a = 'Bob';
而 not defined 是如何發生的呢?只需要將 var a = 'Bob'; 註解即可
console.log(a); // a is not defined
//var a = 'Bob';
我們可以了解到 not defined 的意思是這個「變數或函式未定義」。
當我們在開發時若出現 XXX not defined 就代表你變數或函式忘記宣告
undefined
undefined 是屬於一個特殊關鍵字,通常會發生在提升的時候,因此在這邊有一個重點要補充。
千萬不要針對變數給予 undefined
var a = undefined;
當若你使用 undefined 當作一個值來使用,那麼你就很容易導致自己在開發以及 Debug 的困擾,因為你根本不知道變數到底被賦予值了沒有,因此若你真的想要賦予變數一個初始空值,那就會建議你使用 null,null 就是字面上翻譯空值的意思,使用這個方式來賦予空值,會比你使用 undefined 當作初始值來的好太多
但是這邊額外講一下 null 並不能等於 ‘’ 空字串,因為這兩者在 JavaScript 中是不同的東西,因此不能拿來做比較
我們也可以使用 typeof 來查看為什麼會不能相等以及各自型別是什麼
typeof(''); // string
typeof(null); // object
null會顯示 object 這個原因是 JavaScript 長久以來的 Bug,也因為 JavaScript 已經這樣子運行很久了,若隨意修正這個 Bug 可能會發生全世界的網站都掛掉的問題,所以這個 Bug 才會一直存活在 JavaScripr 中