undefined 并不是 undeclared (未聲明);
undefined 是JS 的七種內置類型之一;
undeclared 是術語, 表示沒有在作用域聲明過的變量.
如果對一個 undeclared 變量做 RHS, 會拋出 ReferenceError: xx is not defined.
這是個容易讓人誤解的提示, 實際上, 應該報 ReferenceError: xx is not declared 更加合適.
有個RHS是例外, 那就是typeof 運算符
對于 undeclared 變量,
typeof運算符會返回undefined, 并不會拋出異常.
這是因為 typeof 有個特殊的安全防范機制.
這樣, typeof 就能夠提供一個非常有用的功能—— 檢測變量的存在性。
例如, 下屬代碼會拋出錯誤
if(DEBUG){
doSomething()
}
可以用 typeof 來安全的實現:
if(typeof DEBUG !== "undefined"){
doSomething()
}
這種情況下, 也可以用全局對象來檢查變量存在性, 例如window.DEBUG. 這時候, 需要注意不同運行環(huán)境下的全局變量(例如 node.js 中, 就不是window )