Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript中将字符串转换为变量名_Javascript_Variables - Fatal编程技术网

在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)