我們在項目中,經常會定義一些變量(很多時候,定義過多的全局變量),當我們調用這些變量的時候,就會發生各種各樣的突發狀況。
看一個示例:
var a; typeof a; typeof b;
很簡單的一段javascript代碼,那么會輸出什么呢?
var a; typeof a; // undefined typeof b; // undefined
那么a和b有什么區別呢?很明顯,a聲明了,但是未賦值,b直接就是未聲明,那通過typeof 檢測都返回undefined是不是讓人很迷惑?
而當我們調用這兩個變量的時候,
調用a的時候,輸出了undefined,不難理解。
調用b的時候,瀏覽器報錯,b is not defined。
這是個什么鬼?
not defined 難道不是undefined的意思?
也確實,從瀏覽器角度來講,報not defined 其實真正表述的意思是,該變量未聲明。
在《你不知道的javascript(中)》中,講到這里的時候,
Similar to above, it would have been nice if typeof
used with an undeclared variable returned "undeclared" instead of conflating the result value with the different "undefined" case.
大意是說,使用typeof 變量,檢測變量類型的時候,這時候如果對於未聲明的變量返回“undeclared”以區別於undefined,就不會那么讓人迷惑了。
然而這里有個關鍵性的問題就是:
javascript中,變量是沒有類型的,只有變量的值才有類型,而且javascript只支持6種類型值,undefined, null, boolean, number, string, object,在ES6種,新增了一種symbol,所以typeof 變量,他檢測的是變量的值的類型,返回的也是變量的值的類型,他並不關心變量是否聲明,他也沒有辦法關心變量是否聲明,因為javascript關心的是值而已,變量的存在僅僅是為了方便我們來使用這些值,所以typeof 變量,無論如何也不可能返回undeclared。