javascript 中為什么要用typeof x ===‘undefined’
0. undefined 本身的介紹
undefined is a property of the global object, i.e. it is a variable in global scope.Starting in JavaScript 1.8.5 (Firefox 4), undefined is non-writable, as per the ECMAScript 5 specification.
1.關于undefined值的判斷:
有 a:x== undefined,b: x===undefined,c:typeof x == 'undefined';d:typeof x === 'undefined'
a方式 的缺陷:x=null,時x== undefined 返回true;
why???原因是==符號隱含了一次類型轉換操作。。。很不幸 null能轉成undefined(反之亦可).
b方式的缺陷:當x未聲明時,b會報變量未聲明的錯誤。。。
也可以通過window.x===undefined來表示。。。這時候你就得記著你判斷的成員是屬于哪個對象的了
c,d方式避免了b的缺陷。。。不必考慮x是全局還是本域了
此外考慮下面代碼:
function foo(){
if(!bool){
alert(bool);
}
var bool = true;
}
是不是會認為會報變量未聲明的錯誤?
很遺憾,沒有。。。
原因在于js中變量的特殊創建邏輯:
js引擎做語法分析,發現顯示聲明時。
js引擎做代碼執行,發現試圖寫一個未被創建的變量時。
js中代碼的運行實際上包含兩個階段,第一階段是語法解釋階段(注意不是語法檢測階段),第二階段就是執行階段。
當調用foo函數(foo())時,實際上js引擎先對foo函數進行了語法解釋,此時由于語句中用var關鍵字顯示聲明了bool,按照js的變量創建邏輯,實際上在fool函數真實執行時bool已經存在,其值為undefined了。
同樣按照上述邏輯,代碼中去掉var 關鍵字,馬上就會出現變量未聲明的錯誤了。
關于js變量的生命周期,詳細參見javascript 語言精髓與編程實踐 第二版 p154


浙公網安備 33010602011771號