Как проверить как определенный, так и переданный с JavaScript параметр? - PullRequest
0 голосов
/ 26 августа 2011

У меня есть эта функция:

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 => исходный код .Я называю это

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

Однако он не может понять его как объект, он работает так, как если бы я делал:

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

Он превращает его в строку, возможно, проблема заключается весть

1 Ответ

2 голосов
/ 26 августа 2011

Вы можете использовать квадратную скобку для ссылки на элементы объекта, чье имя хранится в переменной, так что вы, вероятно, ищете это:

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

}

Кроме того, оператор || вернет первое правдивое значение; что произойдет, если объект будет передан в качестве первого параметра? Это правда, но вам определенно нужна строка , поэтому, хотя оператор || выглядит круто, вы можете найти следующее более подходящим:

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

Edit:

Из вашего комментария попробуйте это:

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

Вы должны передать эту функцию a string .

...