0

在 Javascript 中,我定义了全局变量 sld_label,其中 label 可以是任何字符串。这些被初始化为具有 setval 函数的对象。我需要在一个名为 qq 的字符串参数中传递标签的函数中检查 sld_label 是否已定义。如何在不引发错误的情况下执行此操作?

目前我有以下(有效但在Firebug中产生错误): -

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

帮助!

4

4 回答 4

1

如果是全局的,则它最终成为 的成员window,因此以下工作:

if (typeof window['sld_' + qq] == 'undefined') alert('sld_' + qq + ' is not defined.');
于 2012-08-29T10:38:00.027 回答
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!");
于 2012-08-29T10:49:35.767 回答
0
if (typeof window["sld_" + qq] === "object") {
    window["sld_" + qq].setval(op);
}
于 2012-08-29T10:38:18.673 回答
0

如果要检查变量是否存在

if (typeof yourvar != 'undefined') // Any scope
if (window['varname'] != undefined) // Global scope
if (window['varname'] != void 0) // Old browsers
于 2012-08-29T10:39:21.027 回答