开发者

How to check both defined and parameter passed with JavaScript?

I have that function:

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

and doesn't work. That was like that actually:

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

that function can take a parameter or not and the code above is checking it correctly. Parameter of that function will be a variable. I want to add that ability to my function. It will check whether that variable is defined or not. If not there is a defined variable at system, localize_en, it will be assigned as default.

How can I correct my code. The second part of my code will be that functionality: i.e stringsVar is localize_ar and it is not a defined variable (I define that kind of variables with var keyword)

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

I will add that functionality as parametric.

Any ideas?

PS: localize_en and something like that variables are object.

EDIT: I am working on JQuery localizer plugin => source code. I call it as

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

However it can not understand it as an object, it wo开发者_StackOverflow中文版rks as if I do:

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

It changes it into a string maybe the problem lays on there?


You can use the square bracket notation to refer to object members whose name is stored in a variable, so you're probably looking for this:

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

}

Furthermore, the || operator will return the first truthy; what happens if an object is passed as the first parameter? That's truthy, but you specifically want a string, so whilst the || operator looks cool, you might find the following more appropiate:

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

It also looks like you're getting confused when to use a string to refer to the object your targeting, and when not to.

When you going to be doing something like:

window[someVar]

someVar needs to be a string.

It is possible to pass an object by reference in JavaScript, and after writing all the above to help you fix the problem you've currently got, a better approach will be to pass the object by reference in the first place and avoid the problem completely, rather than passing the name of the variable storing the object:

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

Edit:

From your comment, try this:

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

You should pass this function a string.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜