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

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

当前回答

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

我认为每种方法都有各自的优势,但这真的是一种错误的二分法。 如果你对全局命名空间有疑虑,那就创建一个临时命名空间并使用相同的技术。

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

tempNamespace[myString] = 5;

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

其他回答

让我说得更清楚一点

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

你可以这样做

var name = “foo”; var 值 = “Hello foos”; eval(“var ”+name+“ = '”+value+“';”); 警报(foo);

如果它是一个全局变量,那么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();

对邪恶的评估说不。例如:https://jsfiddle.net/Shaz/WmA8t/