在JavaScript中将字符串转换为变量名称

时间:2011-04-10 18:29:50

标签: javascript variables

我一直在寻找解决方案,但找不到任何有用的工作。

我有一个名为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;

11 个答案:

答案 0 :(得分:249)

如果它是全局变量,那么window[variableName] 或者在你的情况下window["onlyVideo"]可以做到这一点。

答案 1 :(得分:148)

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()是你真正想要使用的东西,除非它有很好的理由。 eval()

答案 2 :(得分:38)

就eval与全球变量解决方案而言......

我认为每个人都有优势,但这实际上是一种错误的二分法。 如果你是全局命名空间的偏执,只需创建一个临时命名空间&使用相同的技术。

var tempNamespace = {};
var myString = "myVarProperty";

tempNamespace[myString] = 5;

非常确定您可以访问tempNamespace.myVarProperty(现在为5),避免使用窗口进行存储。 (字符串也可以直接放入括号中)

答案 3 :(得分:15)

var myString = "echoHello";

window[myString] = function() {
    alert("Hello!");
}

echoHello();

拒绝邪恶评估。示例:https://jsfiddle.net/Shaz/WmA8t/

答案 4 :(得分:8)

您可以将窗口对象作为关联数组进行访问,并将其设置为

window["onlyVideo"] = "TEST";
document.write(onlyVideo);

答案 5 :(得分:7)

窗口[' variableName']方法仅在全局范围内定义变量时才有效。正确的答案是" Refactor"。如果你能提供一个"对象"上下文然后存在一个可能的通用解决方案,但是有一些变量没有全局函数可以根据变量的范围来解决。

(function(){
    var findMe = 'no way';
})();

答案 6 :(得分:4)

如果您尝试访问对象的属性,则必须从window的范围开始并遍历对象的每个属性,直到找到所需的属性。假设已在脚本中的其他位置定义了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]];

这将有助于获取任何对象的属性,无论它有多深。

答案 7 :(得分:2)

您可以这样做

var name = "foo";
var value = "Hello foos";
eval("var "+name+" = '"+value+"';");
alert(foo);

答案 8 :(得分:0)

可以这样做

(function(X, Y) {
  
  // X is the local name of the 'class'
  // Doo is default value if param X is empty
  var X = (typeof X == 'string') ? X: 'Doo';
  var Y = (typeof Y == 'string') ? Y: 'doo';
  
  // this refers to the local X defined above
  this[X] = function(doo) {
    // object variable
    this.doo = doo || 'doo it';
  }
  // prototypal inheritance for methods
  // defined by another
  this[X].prototype[Y] = function() {
    return this.doo || 'doo';
  };
  
  // make X global
  window[X] = this[X];
}('Dooa', 'dooa')); // give the names here

// test
doo = new Dooa('abc');
doo2 = new Dooa('def');
console.log(doo.dooa());
console.log(doo2.dooa());

答案 9 :(得分:0)

以下代码可轻松引用JavaScript中的每个DIV和其他HTML元素。该代码应位于标记之前,以便可以看到所有HTML元素。您应该在其后跟随您的JavaScript代码。

// For each element with an id (example: 'MyDIV') in the body, create a variable
// for easy reference. An example is below.
var D=document;
var id={}; // All ID elements
var els=document.body.getElementsByTagName('*');
for (var i = 0; i < els.length; i++)
    {
    thisid = els[i].id;
    if (!thisid)
        continue;
    val=D.getElementById(thisid);
    id[thisid]=val;
    }

// Usage:
id.MyDIV.innerHTML="hello";

答案 10 :(得分:-1)

让我说得更清楚

function changeStringToVariable(variable, value){
window[variable]=value
}
changeStringToVariable("name", "john doe");
console.log(name);
//this outputs: john doe
let file="newFile";
changeStringToVariable(file, "text file");
console.log(newFile);
//this outputs: text file