使變數有意義:
1、定義變數即變數聲明,類似於:var str;
2、變數賦值即變數初始化,類似於str="test";
這2步我們可一步到位,即定義變數的同時給變數賦值,類似於:var str="test";
有定義但沒賦值的變數,會保持特殊的值:undefined(非字串) ,即 var str; str==undefined 返回true
對一個未定義過的變數即未聲明過的變數,只能執行一項操作,即使用typeof操作符檢測其資料類型(如: typeof str 或 typeof(str) ,注意:typeof是一操作符不是函數,其後的圓括弧非必須,完全可省略,另外typeof返回的是字串),執行其它操作都會報錯!
清楚上面的概念,js判斷變數是否有被賦值的方法就出來了:
方法1:
| 代碼如下 |
複製代碼 |
| var str; if(str==undefined){ alert("該變數沒被賦過值") }else{ alert("該變數被賦過值啦") } |
但該方法的前提是變數str必須是有定義過的,即進行過變數聲明,否則會報錯,報錯原因如上加粗文字所示!
方法2:
| 代碼如下 |
複製代碼 |
| if(typeof str =='undefined'){ //必須加引號,因typeof返回的是字串 alert("該變數沒被賦過值") }else{ alert("該變數被賦過值啦") } 或者這要樣寫 function check(bianliang){ if(typeof(bianliang)=='undefined'){ alert("變數沒有定義哦"); }else{ alert("變數定義了哦"); } } |
推薦使用方法2,來js判斷變數是否有被賦值!!
除了var命令,還可以有另一種改寫,也能得到正確的結果:
| 代碼如下 |
複製代碼 |
| if (!window.myObj) { myObj = { }; } |
window是javascript的頂層對象,所有的全域變數都是它的屬性。所以,判斷myobj是否為空白,等同於判斷window對象是否有myobj屬性,這樣就可以避免因為myObj沒有定義而出現ReferenceError錯誤。不過,從代碼的規範性考慮,最好還是對第二行加上var:
| 代碼如下 |
複製代碼 |
| if (!window.myObj) { var myObj = { }; } 或者寫成這樣: if (!window.myObj) { window.myObj = { }; } |