如何检查使用JavaScript传递的已定义和参数?

时间:2011-08-26 08:04:59

标签: javascript jquery window undefined jquery-localizer

我有这个功能:

function(stringsVar) {
var stringRes = stringsVar || localize_en;
if('window.'+stringsVar === undefined) {
    stringRes = localize_en;
}
...
}

并不起作用。实际上就是这样:

function(stringsVar) {
    var stringRes = stringsVar || localize_en;
}

该函数可以带参数或不带参数,上面的代码正确检查它。该函数的参数将是一个变量。我想将这个功能添加到我的功能中。它将检查是否定义了该变量。如果没有在系统中定义的变量localize_en,它将被指定为默认值。

如何更正我的代码。我的代码的第二部分将是该功能: 即stringsVar是localize_ar,它不是一个已定义的变量(我用var关键字定义了那种变量)

if(window.localize_ar === undefined){
alert('yes');}
else {
alert('no');
}

我将该功能添加为参数。

有什么想法吗?

PS: localize_en等类似变量的对象。

编辑:我正在研究JQuery localizer plugin => source code。 我称之为

$('html').localize('localize_' + tr);

然而,它不能将它理解为一个对象,它就像我一样:

$('html').localize(localize_tr);

它把它改成一个字符串可能问题就在那里?

1 个答案:

答案 0 :(得分:2)

您可以使用square bracket notation来引用名称存储在变量中的对象成员,因此您可能正在寻找:

if (window[stringsVar] === undefined) {

}

此外,||运算符将返回第一个truthy;如果一个对象作为第一个参数传递会发生什么?这很简单,但你特别想要一个字符串,所以虽然||运算符看起来很酷,你可能会发现以下更合适:

if (typeof stringVar !== "string") {
    stringVar = "localize_en";
}

当您使用字符串引用您的定位对象时,以及何时不这样做,您也会感到困惑。

当你要做类似的事情时:

window[someVar]

someVar 需要成为字符串。

可以在JavaScript中通过引用传递对象,并且在编写了上述所有内容以帮助您修复当前得到的问题之后,更好的方法是通过以下方式传递对象:首先引用并避免问题完全,而不是传递存储对象的变量的名称

function(obj) {
    if (typeof obj !== "object") { 
        obj = localize_en; // here we're wanting the object itself, rather than the name of the object, so we're not using a string.
    };

    // Now use `obj`. It'll be either the object the user passed, or the default (localize_en).

    // You can even store this in a global variable if you want to:
    window.selected_obj = obj;
}

编辑:

根据您的评论,试试这个:

function (stringsVar) {
    if (typeof stringsVar !== "string" || typeof window[stringsVar] !== "object") {
        stringsVar = "localize_en"; // Set the default of the argument, if either none is provided, or it isn't a string, or it doesn't point to a valid object
    }

    var stringRes = window[stringsVar];

    // Now do *whatever* you want with stringRes. It will either be the *valid* localization type the parameter specified, or the default ("localize_en").
}

您应该将此功能传递给 字符串