基于javascript中的对象值声明变量
我今天遇到了一个简单的问题,似乎找不到解决的办法,不管解决的办法是什么,这是我从未学过的东西,所以让我感到困惑 出于我不想讨论的原因,我需要从对象中获取一个值,并将其用作新变量的名称。将循环通过一吨这样需要重复。例如,从这样一个对象基于javascript中的对象值声明变量,javascript,variables,object,Javascript,Variables,Object,我今天遇到了一个简单的问题,似乎找不到解决的办法,不管解决的办法是什么,这是我从未学过的东西,所以让我感到困惑 出于我不想讨论的原因,我需要从对象中获取一个值,并将其用作新变量的名称。将循环通过一吨这样需要重复。例如,从这样一个对象 obj = { "name": "object101" }; 我想从中得到的是一个var声明,object101是新var的名称 "var object101 = // stuff" 但是“var obj.name=//stuff”不起作用,点似乎
obj = {
"name": "object101"
};
我想从中得到的是一个var声明,object101是新var的名称
"var object101 = // stuff"
但是
“var obj.name=//stuff”
不起作用,点似乎无效
我还尝试将object101放入它自己的变量中,比如,var name=obj.name代码>
它可以很好地保存内容。但随后我立即看到了使用,var name=//stuff
它只是重新定义了“名称”,并没有放置名称的内容。在控制台日志中,如console.log(“var”+name+“=stuff”)
这正是我希望它写入代码的方式,但是在实际代码中存在这个问题,在这种情况下重新定义了var
因此,我觉得在如何提供声明变量的名称方面,我缺少了一些非常基本的东西。可能我缺少了一些非常简单的语法,或者可能有一个基于其他对象动态创建变量声明名称的过程。我已经完成了js的大部分工作,从未见过var[复杂的语法导致name]=
,它总是非常简单
但到目前为止,我的研究在这个问题上还是一片空白。有谁能启发我吗?好吧,为了科学的利益:
(function() {
var dynaVarName = 'testName';
eval('var ' + dynaVarName + ';');
eval(dynaVarName + ' = 5;');
eval('console.log(' + dynaVarName + ');'); // => 5
}());
testName // => ReferenceError
是的,你可以创建一个基于表达式的局部变量。但我无法想象这样做的好处。好吧,为了科学的利益:
(function() {
var dynaVarName = 'testName';
eval('var ' + dynaVarName + ';');
eval(dynaVarName + ' = 5;');
eval('console.log(' + dynaVarName + ');'); // => 5
}());
testName // => ReferenceError
是的,你可以创建一个基于表达式的局部变量。但我无法想象这样做的好处。好吧,为了科学的利益:
(function() {
var dynaVarName = 'testName';
eval('var ' + dynaVarName + ';');
eval(dynaVarName + ' = 5;');
eval('console.log(' + dynaVarName + ');'); // => 5
}());
testName // => ReferenceError
是的,你可以创建一个基于表达式的局部变量。但我无法想象这样做的好处。好吧,为了科学的利益:
(function() {
var dynaVarName = 'testName';
eval('var ' + dynaVarName + ';');
eval(dynaVarName + ' = 5;');
eval('console.log(' + dynaVarName + ');'); // => 5
}());
testName // => ReferenceError
是的,你可以创建一个基于表达式的局部变量。但我无法想象这样做的好处。哇,你真的不想做你认为你想做的事,但事情就这样发生了
如果您在浏览器中操作,并且希望变量位于全局范围内,幸运的是全局范围有一个名称:window
您可以这样做:
window[obj.name] = 'stuff';
如果您希望它位于本地范围内,则可以将几乎禁止的关键字与
一起使用:
var f = function(obj, b) {
var fake_scope = {};
with (fake_scope) {
fake_scope[obj.name] = b;
console.log(d);
}
}
f( { name : 'd' } , 3 )
将打印出3
如果您需要本地作用域,并且不想将与
一起使用,则必须使用eval
进行操作
但说真的,如果你这么做,。哇,你真的不想做你认为你想做的事,但事情就这样发生了
如果您在浏览器中操作,并且希望变量位于全局范围内,幸运的是全局范围有一个名称:window
您可以这样做:
window[obj.name] = 'stuff';
如果您希望它位于本地范围内,则可以将几乎禁止的关键字与
一起使用:
var f = function(obj, b) {
var fake_scope = {};
with (fake_scope) {
fake_scope[obj.name] = b;
console.log(d);
}
}
f( { name : 'd' } , 3 )
将打印出3
如果您需要本地作用域,并且不想将与
一起使用,则必须使用eval
进行操作
但说真的,如果你这么做,。哇,你真的不想做你认为你想做的事,但事情就这样发生了
如果您在浏览器中操作,并且希望变量位于全局范围内,幸运的是全局范围有一个名称:window
您可以这样做:
window[obj.name] = 'stuff';
如果您希望它位于本地范围内,则可以将几乎禁止的关键字与
一起使用:
var f = function(obj, b) {
var fake_scope = {};
with (fake_scope) {
fake_scope[obj.name] = b;
console.log(d);
}
}
f( { name : 'd' } , 3 )
将打印出3
如果您需要本地作用域,并且不想将与
一起使用,则必须使用eval
进行操作
但说真的,如果你这么做,。哇,你真的不想做你认为你想做的事,但事情就这样发生了
如果您在浏览器中操作,并且希望变量位于全局范围内,幸运的是全局范围有一个名称:window
您可以这样做:
window[obj.name] = 'stuff';
如果您希望它位于本地范围内,则可以将几乎禁止的关键字与
一起使用:
var f = function(obj, b) {
var fake_scope = {};
with (fake_scope) {
fake_scope[obj.name] = b;
console.log(d);
}
}
f( { name : 'd' } , 3 )
将打印出3
如果您需要本地作用域,并且不想将与
一起使用,则必须使用eval
进行操作
但说真的,如果你这样做,.听起来像是XY问题。有一个原因你从未见过这种语法,因为它不存在。。。你为什么要这样做?也许我们可以帮你找到解决实际问题的方法。听起来像是XY问题。有一个原因你从未见过这种语法,因为它不存在。。。你为什么要这样做?也许我们可以帮你找到解决实际问题的方法。听起来像是XY问题。有一个原因你从未见过这种语法,因为它不存在。。。你为什么要这样做?也许我们可以帮你找到解决实际问题的方法。听起来像是XY问题。有一个原因你从未见过这种语法,因为它不存在。。。你为什么要这样做?也许我们可以帮助您找到解决实际问题的方法。嗯,我投了您的赞成票,但表达了我对这件事的看法。不需要第二个两个eval语句,只需要第一个。@RobG您的意思是我可以将三个eval中的字符串连接起来?是的,我能。但通过这种方式,我证明了新引入的变量在eval
完成后仍然存在。您也可以构建一个函数体并使用函数构造函数,但我猜这与eval大致相同。OP没有解释他们想做什么,所以很难提出解决方案。对象属性通常如此