0%

JS核心(7)-執行環境與作用域-not defined VS undefined

前言

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 的困擾,因為你根本不知道變數到底被賦予值了沒有,因此若你真的想要賦予變數一個初始空值,那就會建議你使用 nullnull 就是字面上翻譯空值的意思,使用這個方式來賦予空值,會比你使用 undefined 當作初始值來的好太多

但是這邊額外講一下 null 並不能等於 ‘’ 空字串,因為這兩者在 JavaScript 中是不同的東西,因此不能拿來做比較

我們也可以使用 typeof 來查看為什麼會不能相等以及各自型別是什麼

typeof(''); // string

typeof(null); // object

null 會顯示 object 這個原因是 JavaScript 長久以來的 Bug,也因為 JavaScript 已經這樣子運行很久了,若隨意修正這個 Bug 可能會發生全世界的網站都掛掉的問題,所以這個 Bug 才會一直存活在 JavaScripr 中