在javascript中基于对象值声明变量

时间:2014-03-19 01:06:35

标签: javascript variables object

简单的问题我今天碰到了它并且似乎无法找到解决方法,无论解决方案是什么,这是我从未学过的东西,所以让我感到难过。

由于我不会进入的原因,我需要从对象获取值并将其用作新变量的名称。将循环通过大量的这些需要是可重复的。例如,来自像这样的对象,

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] =,它总是非常简单。

但到目前为止,我的搜索在这个问题上已经空白了。有人能够启发我吗?

2 个答案:

答案 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

所以,是的,您实际上可以使用基于表达式的名称创建一个局部变量。我无法想象这样做的好处。