0

我有这个功能:

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);

它将它变成一个字符串,也许问题出在那儿?

4

1 回答 1

2

您可以使用方括号表示法来引用其名称存储在变量中的对象成员,因此您可能正在寻找这个:

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

}

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

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").
}

你应该给这个函数传递一个字符串

于 2011-08-26T08:10:15.250 回答