2012-08-29 90 views
0

在Javascript中,我定義了全局變量sld_label,其中label可以是任何字符串。這些被初始化爲具有setval函數的對象。我需要在一個名爲qq的字符串參數中遞交標籤的函數中檢查是否定義了sld_label。 如何在不引發錯誤的情況下執行此操作?如何查看是否在Javascript中定義了變量名稱

目前我有以下的(這工作,但在Firebug產生一個錯誤): -

function setclrques(qq,op) 
{ 
    if (typeof(eval('sld_'+qq))=='object') eval('sld_'+qq+'.setval('+op+')'); 
} 

幫助!

+1

這已經被問過很多次[SO](HTTP://計算器的.com /問題/ 519145 /如何-可以-I-籤是否-A-可變被定義式的JavaScript)。 –

回答

0

我實現了東西喜歡這個。

function Test() 
{ 
} 

Test.prototype.setval = function(options) 
{ 
    alert(options); 
} 

function setclrques(qq,op) 
{ 
    var obj = window['sld_'+qq]; 
    if(obj!=undefined && obj.setval!=undefined) 
    { 
     obj.setval(op); 
    } 
} 

var sld_qwer = new Test(); 
setclrques("qwer","test!"); 

不過我建議你考慮關聯數組,而不是獨立變量存儲如果可能的對象:

function Test() 
{ 
} 

Test.prototype.setval = function(options) 
{ 
    alert(options); 
} 

var sld = []; 
sld["qwer"] = new Test(); 

function setclrques(qq,op) 
{ 
    var obj = sld[qq]; 
    if(obj!=undefined && obj.setval!=undefined) 
    { 
     obj.setval(op); 
    } 
} 

setclrques("qwer","test!"); 
+0

偉大的建議!我不知道JavaScript支持關聯數組。謝謝! –

1

如果全球那麼它最終爲window成員,使以下工作:

if (typeof window['sld_' + qq] == 'undefined') alert('sld_' + qq + ' is not defined.'); 
+1

如果變量已被定義爲false或0(零),則檢查將失敗! – daveoncode

+0

啊,是的,這是真的,我會解決它。 – Lloyd

+0

它的關鍵是使用窗口變量名!謝謝! –

0
if (typeof window["sld_" + qq] === "object") { 
    window["sld_" + qq].setval(op); 
} 
+0

這是最好的解決方案,因爲沒有電話給「eval」 - 謝謝! –

0

如果你想檢查的變量存在

if (typeof yourvar != 'undefined') // Any scope 
if (window['varname'] != undefined) // Global scope 
if (window['varname'] != void 0) // Old browsers 
+0

+1類型.. – 2012-08-29 10:40:18

相關問題