简单的问题我今天碰到了它并且似乎无法找到解决方法,无论解决方案是什么,这是我从未学过的东西,所以让我感到难过。
由于我不会进入的原因,我需要从对象获取值并将其用作新变量的名称。将循环通过大量的这些需要是可重复的。例如,来自像这样的对象,
obj = {
"name": "object101"
};
我想要从中得到的是一个var声明,其中object101是新var的名称,
"var object101 = // stuff"
但"var obj.name = // stuff"
无效,点似乎无效。
我也尝试将object101放入它自己的var中,var name = obj.name;
。
内容很好。但后来我立刻看到了热闹的问题var name = // stuff
它只是重新定义“名称”而不是放置名称的内容。它在console.log("var "+name+" = stuff");
之类的控制台日志中正确呈现,这几乎就是我希望它写入代码的方式,但在实际代码中出现此问题,在这种情况下重新定义了var。
所以我觉得我遗漏了一些非常基本的东西,你可以提供声明var的名称。也许有一些非常简单的语法我缺少了,或者可能有一个进程可以根据其他对象动态生成var声明名称。我已经完成了js的公平分享并且从未见过var [complex syntax resulting in name] =
,它总是非常简单。
但到目前为止,我的搜索在这个问题上已经空白了。有人能够启发我吗?
答案 0 :(得分:2)
哇,你真的不想做你想做的事情,但是这里有。
如果您在浏览器中操作并且希望变量位于全局范围内,那么全局范围的名称为window
。
你可以这样做:
window[obj.name] = 'stuff';
如果您希望将其置于本地范围内,则可以使用几乎禁用的关键字with
:
var f = function(obj, b) {
var fake_scope = {};
with (fake_scope) {
fake_scope[obj.name] = b;
console.log(d);
}
}
f( { name : 'd' } , 3 )
将打印出来。
如果您需要本地范围但又不想使用with
,则必须使用eval
。
但严重的是,如果你这样做,remember。
答案 1 :(得分:1)
嗯,为了科学的利益:
(function() {
var dynaVarName = 'testName';
eval('var ' + dynaVarName + ';');
eval(dynaVarName + ' = 5;');
eval('console.log(' + dynaVarName + ');'); // => 5
}());
testName // => ReferenceError
所以,是的,您实际上可以使用基于表达式的名称创建一个局部变量。我无法想象这样做的好处。