Вы можете использовать квадратную скобку для ссылки на элементы объекта, чье имя хранится в переменной, так что вы, вероятно, ищете это:
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 .