在處理html5的頁面取值的時候,發現當取不到的時候報錯,js程式不再執行,直接寫個修正函數處理
如下:
| 代碼如下 |
複製代碼 |
//修正未定義的變數 function checkUnfined(value){ if(typeof(value)=='undefined'){ return ""; } return value; }
|
話說判斷是否未定義也是很常用的東東
看下面簡單例子
| 代碼如下 |
複製代碼 |
if(typeof(VAL1) == 'undefined') { var VAL1 = "now defined"; }else { alert("already defined"); } alert("VAL1=" + VAL1);
|
通過判斷typeof(VAL1) == 'undefin'可以知道某變數是否定義。順便提一下,javascript裡面沒有block的概念,所以儘管VAL1是在if語句種定義的,在外面仍然可以訪問。
但是注意如果某個var是在函數內定義的,那麼該變數則是該函數的局部變數。
再看下面的例子
| 代碼如下 |
複製代碼 |
if(typeof(FUN1) == 'undefined') { alert("now define the FUN1"); function FUN1() { alert("this is FUN1"); } }else { alert("already defined"); }
|
你覺得輸出應該是什嗎?
正確答案應該是alert("already defined");。
函數和變數不同,對於funtion 這個關鍵字,javascript是在編譯期間就搞定了,所以執行時認為該函數已經定義。
這樣對於函數判斷是否定義可以更具體的用
if(typeof(FUNC1) == 'function')
來檢查一個函數是否聲明。對於作外掛程式的程式可能會有用。
全域對象,可以用window.變數名方式判斷:
| 代碼如下 |
複製代碼 |
if(window.MyObject == null) { window.MyObject = {}; } //或者 if(!("MyObject" in window)) { window.MyObject = {}; } |
不建議使用if(!MyObject)或者if(!window.MyObject)方式判斷對象是否存在,因為當MyObject=false或者MyObject=""時,該條件判斷也是成立的。
附上判斷對象未定義的方法:
| 代碼如下 |
複製代碼 |
var a; alert(a == undefined);//第一種 alert(typeof a == "undefined");//第二種 alert(a === undefined);//與第一種類似 //如果是判斷一個對象的某個屬性是否存在,可以用以下方法: var obj = {}; alert(obj.hasOwnProperty('a')); alert('a' in obj); |