我有这个功能:
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);
它把它改成一个字符串可能问题就在那里?
答案 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").
}
您应该将此功能传递给 字符串 。