我一直在寻找解决方案,但找不到任何可行的方法。
我有一个名为的变量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;
如果它是一个全局变量,然后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 tempNamespace = {};
var myString = "myVarProperty";
tempNamespace[myString] = 5;
可以肯定的是,然后您可以访问tempNamespace.myVarProperty(现在为5),避免使用存储窗口。(字符串也可以直接放在括号中)
var myString = "echoHello";
window[myString] = function() {
alert("Hello!");
}
echoHello();
对邪恶的评价说不。此处的示例:https : //jsfiddle.net/Shaz/WmA8t/
您可以将窗口对象作为关联数组进行访问并进行设置
window["onlyVideo"] = "TEST";
document.write(onlyVideo);
仅当在全局范围内定义变量时,window ['variableName']方法才有效。正确答案是“重构”。如果可以提供“对象”上下文,则可能存在通用解决方案,但是有些变量无法根据变量的范围解析全局函数。
(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]];
无论对象的深度如何,这都将用于获取其属性。
你可以这样
var name = "foo";
var value = "Hello foos";
eval("var "+name+" = '"+value+"';");
alert(foo);
可以这样做
(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());
以下代码使在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
文章标签:javascript , variables
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!
评论已关闭!