在JavaScript中将字符串转换为变量名
我一直在寻找解决方案,但找不到任何有效的方法 我有一个名为在JavaScript中将字符串转换为变量名,javascript,variables,Javascript,Variables,我一直在寻找解决方案,但找不到任何有效的方法 我有一个名为onlyVideo的变量 “onlyVideo”字符串被传递到函数中。我想将函数中的变量onlyVideo设置为某物。我该怎么做 (函数中可以调用许多变量,因此我需要它动态工作,而不是硬编码的if语句。) 编辑:可能有更好的方法来做你想做的事情。在JavaScript冒险的早期,我问过这个问题。查看JavaScript对象是如何工作的 简单介绍: // create JavaScript object var obj = { "key1"
onlyVideo
的变量
“onlyVideo”
字符串被传递到函数中。我想将函数中的变量onlyVideo
设置为某物。我该怎么做
(函数中可以调用许多变量,因此我需要它动态工作,而不是硬编码的if
语句。)
编辑:可能有更好的方法来做你想做的事情。在JavaScript冒险的早期,我问过这个问题。查看JavaScript对象是如何工作的
简单介绍:
// create JavaScript object
var obj = { "key1": 1 };
// assign - set "key2" to 2
obj.key2 = 2;
// read values
obj.key1 === 1;
obj.key2 === 2;
// read values with a string, same result as above
// but works with special characters and spaces
// and of course variables
obj["key1"] === 1;
obj["key2"] === 2;
// read with a variable
var key1Str = "key1";
obj[key1Str] === 1;
如果是全局变量,则
窗口[variableName]
或者在您的情况下,
window[“onlyVideo”]
应该可以做到这一点。如果它是一个全局变量,那么window[variableName]
或者在您的情况下,
window[“onlyVideo”]
应该可以做到这一点。Javascript有一个eval()
函数用于这种情况:
function (varString) {
var myVar = eval(varString);
// .....
}
编辑:对不起,我想我把问题略过得太快了。这只会让你得到你需要的变量
function SetTo5(varString) {
var newValue = 5;
eval(varString + " = " + newValue);
}
或者如果使用字符串:
function SetToString(varString) {
var newValue = "string";
eval(varString + " = " + "'" + newValue + "'");
}
但是我想有一种更合适的方式来完成你想要的东西?我不认为eval()是你真正想要使用的东西,除非有很好的理由 Javascript有一个
eval()
函数用于以下情况:
function (varString) {
var myVar = eval(varString);
// .....
}
编辑:对不起,我想我把问题略过得太快了。这只会让你得到你需要的变量
function SetTo5(varString) {
var newValue = 5;
eval(varString + " = " + newValue);
}
或者如果使用字符串:
function SetToString(varString) {
var newValue = "string";
eval(varString + " = " + "'" + newValue + "'");
}
但是我想有一种更合适的方式来完成你想要的东西?我不认为eval()是你真正想要使用的东西,除非有很好的理由
对邪恶的评价说不。示例如下:
对邪恶的评价说不。此处的示例:您可以将窗口对象作为关联数组进行访问,并进行设置
window["onlyVideo"] = "TEST";
document.write(onlyVideo);
可以将窗口对象作为关联数组进行访问并进行设置
window["onlyVideo"] = "TEST";
document.write(onlyVideo);
就评估与全局变量解决方案而言 我认为两者都有优点,但这实际上是一种错误的二分法。 如果您对全局名称空间有偏见,只需创建一个临时名称空间&使用相同的技术
var tempNamespace = {};
var myString = "myVarProperty";
tempNamespace[myString] = 5;
非常确定您可以作为tempnespace.myVarProperty(现在是5)访问,从而避免使用窗口存储。(字符串也可以直接放在括号中)至于eval与全局变量解决方案 我认为两者都有优点,但这实际上是一种错误的二分法。 如果您对全局名称空间有偏见,只需创建一个临时名称空间&使用相同的技术
var tempNamespace = {};
var myString = "myVarProperty";
tempNamespace[myString] = 5;
非常确定您可以作为tempnespace.myVarProperty(现在是5)访问,从而避免使用窗口存储。(字符串也可以直接放在括号中)只有在全局范围内定义变量时,窗口['variableName']方法才有效。正确答案是“重构”。如果您可以提供一个“对象”上下文,那么可能存在一个通用的解决方案,但是存在一些变量,没有全局函数可以根据变量的范围来解析这些变量
(function(){
var findMe = 'no way';
})();
window['variableName']方法仅在全局范围内定义变量时有效。正确答案是“重构”。如果您可以提供一个“对象”上下文,那么可能存在一个通用的解决方案,但是存在一些变量,没有全局函数可以根据变量的范围来解析这些变量
(function(){
var findMe = 'no way';
})();
如果要访问对象的属性,必须从
窗口的范围开始,遍历对象的每个属性,直到找到所需的属性。假设a.b.c
已在脚本中的其他地方定义,则可以使用以下命令:
var values = window;
var str = 'a.b.c'.values.split('.');
for(var i=0; i < str.length; i++)
values = values[str[i]];
var值=窗口;
var str='a.b.c'.values.split('.');
对于(变量i=0;i
这将用于获取任何对象的属性,无论它有多深。如果您试图访问对象的属性,您必须从窗口的范围开始,遍历对象的每个属性,直到找到所需的属性为止。假设a.b.c
已在脚本中的其他地方定义,则可以使用以下命令:
var values = window;
var str = 'a.b.c'.values.split('.');
for(var i=0; i < str.length; i++)
values = values[str[i]];
var值=窗口;
var str='a.b.c'.values.split('.');
对于(变量i=0;i
这将用于获取任何对象的属性,无论对象有多深。可以这样做
(函数(X,Y){
//X是“类”的本地名称
//如果参数X为空,则Doo为默认值
变量X=(typeof X='string')?X:'Doo';
变量Y=(typeof Y='string')?Y:'doo';
//这是指上面定义的局部X
此[X]=函数(doo){
//对象变量
this.doo=doo | |‘doo it’;
}
//方法的原型继承
//由另一方定义
此[X]。原型[Y]=函数(){
把这个还给我;
};
//使X全球化
窗口[X]=此[X];
}('Dooa','Dooa');//把名字写在这里
//试验
doo=新的Dooa(“abc”);
doo2=新的Dooa(“def”);
console.log(doo.dooa());
console.log(doo2.dooa())代码>可以这样做
(函数(X,Y){
//X是“类”的本地名称
//如果参数X为空,则Doo为默认值
变量X=(typeof X='string')?X:'Doo';
变量Y=(typeof Y='string')?Y:'doo';
//这是指上面定义的局部X
此[X]=函数(doo){
//对象变量
this.doo=doo | |‘doo it’;
}
//方法的原型继承
//由另一方定义
此[X]。原型[Y]=函数(){
把这个还给我;
};
//使X全球化
窗口[X]=此[X];
}('Dooa','Dooa');//把名字写在这里
//试验
doo=新的Dooa(“abc”);
doo2=新的Dooa(“def”);
控制台日志(d)