0. undefined 本身的介紹
undefined
is a property of the
global object, i.e. it is a variable in global scope. JavaScript 1.8.5 note
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