2012-10-15 62 views
0

我試圖做到這一點:爲什麼我不能測試未定義的變量

var currentpage = page ? page : null; 

然而,如果頁面還沒有定義,該腳本將引發錯誤。即使我測試頁面未定義,只要腳本查找頁面錯誤。

爲什麼以及圍繞此問題的方法是什麼?

更新:使代碼示例更清晰;

+0

可以張貼高於此的代碼行線頁面? 'page ='+ page:'' – defau1t

回答

1

試圖讀取未聲明的變量只會拋出一個ReferenceError並終止腳本。

> x123 
ReferenceError: x123 is not defined 

更好的問題是,爲什麼你不知道你的變量是否存在。在正常情況下,這通常意味着你在做某事不好的。爲什麼你需要檢查這種情況?當然,我們可以提出更好的方法。

+0

正確的方式相同,但是如果你寫這樣的測試:if(undefined === test)'那麼它的工作原理 – nimrod

+0

@nimrod我的Chrome仍然給我一個ReferenceError。 [試試看](http://jsfiddle.net/k2eG7/)。 – phant0m

+0

正確的,不知道爲什麼我認爲這是現在工作... – nimrod

1

使用typeof操作爲:

var a = (typeof page != 'undefined') ? 'page=' + page: ''; 
alert(a); 
+0

我知道我可以做到這一點,但不應該測試未定義的值的工作? – nimrod

+0

@nimrod如果你直接訪問變量並且變量不存在,那麼解釋器會拋出一個錯誤,那就是正確的行爲,並且它在所有動態語言中都是相同的,例如在PHP中,我們必須在PHP中保護訪問isset()函數與我們在這裏使用typeof – Nelson

1

必須使用var page或作爲函數參數function (page)地方已定義的變量。如果您在同一範圍內的任何位置執行此操作,則該變量將被聲明並存在,即使它沒有值。如果你正在嘗試使用一些甚至沒有在同一個範圍內聲明的變量,那就錯了,因爲它在任何情況下都無法工作,並且Javascript完全正確地拋出一個錯誤。

0

各地的另一種方式是這樣的,即使你的var a是不確定的東西都不會被執行,那是你的腳本將不會停止執行

if(window.a){ 
     alert('hello'); 
    } else { 
     alert('this else will fire'); 
    } 
相關問題