swi*_*itz 245 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;
Run Code Online (Sandbox Code Playgroud)
ing*_*ngo 265
如果它是一个全局变量那么window[variableName]
或者在你的情况下window["onlyVideo"]
应该做的伎俩.
gog*_*n13 155
Javascript具有以下eval()
功能:
function (varString) {
var myVar = eval(varString);
// .....
}
Run Code Online (Sandbox Code Playgroud)
编辑:对不起,我想我太快地浏览了这个问题.这只会给你变量,设置你需要的变量
function SetTo5(varString) {
var newValue = 5;
eval(varString + " = " + newValue);
}
Run Code Online (Sandbox Code Playgroud)
或者如果使用字符串:
function SetToString(varString) {
var newValue = "string";
eval(varString + " = " + "'" + newValue + "'");
}
Run Code Online (Sandbox Code Playgroud)
但我想有一种更合适的方法来完成你想要的东西?我不认为eval()是你真正想要使用的东西,除非它有很好的理由.的eval()
jm0*_*jm0 40
就eval与全局变量解决方案而言......
我认为每个都有优势,但这确实是一个错误的二分法.如果你是全局命名空间的偏执,只需创建一个临时命名空间并使用相同的技术.
var tempNamespace = {};
var myString = "myVarProperty";
tempNamespace[myString] = 5;
Run Code Online (Sandbox Code Playgroud)
很确定你可以访问tempNamespace.myVarProperty(现在为5),避免使用窗口进行存储.(字符串也可以直接放入括号中)
Sha*_*haz 15
var myString = "echoHello";
window[myString] = function() {
alert("Hello!");
}
echoHello();
Run Code Online (Sandbox Code Playgroud)
对邪恶的评价说不.示例:https://jsfiddle.net/Shaz/WmA8t/
您可以将窗口对象作为关联数组进行访问,并将其设置为该方式
window["onlyVideo"] = "TEST";
document.write(onlyVideo);
Run Code Online (Sandbox Code Playgroud)
只有在全局范围内定义变量时,window ['variableName']方法才有效.正确答案是"重构".如果您可以提供"对象"上下文,则存在可能的通用解决方案,但是有一些变量没有全局函数可以根据变量的范围来解析.
(function(){
var findMe = 'no way';
})();
Run Code Online (Sandbox Code Playgroud)
小智 7
如果您尝试访问对象的属性,则必须从对象的作用域开始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]];
Run Code Online (Sandbox Code Playgroud)
这将适用于获取任何对象的属性,无论它有多深。
小智 5
你可以这样做
var name = "foo";
var value = "Hello foos";
eval("var "+name+" = '"+value+"';");
alert(foo);
Run Code Online (Sandbox Code Playgroud)