在JavaScript中转换字符串到变量名

我一直在寻找解决方案,但找不到任何可行的。

我有一个名为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;
401088 次浏览

如果它是一个全局变量,则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()是你真正想要使用的东西,除非有很好的理由。eval ()

var myString = "echoHello";


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


echoHello();

邪恶的 eval说不。示例:https://jsfiddle.net/Shaz/WmA8t/

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

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

至于eval和全局变量解决方案……

我认为每一种都有优点,但这真的是一个错误的二分法。 如果你对全局命名空间有偏执,那就创建一个临时命名空间&

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


tempNamespace[myString] = 5;

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

window['variableName']方法仅在变量定义在全局作用域时有效。正确答案是“重构”。如果你能提供一个“Object”上下文,那么一个可能的通用解决方案就存在了,但是有一些变量是全局函数无法根据变量的作用域解析的。

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

如果你试图访问一个对象的属性,你必须从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]];

这将适用于获取任何物体的属性,无论它有多深。

可以这样做

(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());

你可以这样做

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

下面的代码可以方便地在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";

让我说得更清楚一点

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