JavaScript:字符串化实际变量名
我目前正在运行一系列函数,其中第一个参数是在别处定义的变量,第二个参数是碰巧与变量名相同的字符串:JavaScript:字符串化实际变量名,javascript,Javascript,我目前正在运行一系列函数,其中第一个参数是在别处定义的变量,第二个参数是碰巧与变量名相同的字符串: assignString(Hello, 'Hello') assignString(World, 'World') assignString(Foo, 'Foo') assignString(Bar, 'Bar') ... 理想情况下,我想将其简化为: ['Hello', 'World', 'Foo', 'Bar'].forEach(() => { assignString... })
assignString(Hello, 'Hello')
assignString(World, 'World')
assignString(Foo, 'Foo')
assignString(Bar, 'Bar')
...
理想情况下,我想将其简化为:
['Hello', 'World', 'Foo', 'Bar'].forEach(() => { assignString... })
or
[Hello, World, Foo, Bar].forEach(() => { assignString... })
var exampleStringValue = 'HELLO';
window[exampleStringValue] = exampleStringValue;
console.log(window.HELLO);
// or, since window is the global context in the browser
console.log(HELLO)
这实际上是可能的吗?您可以使用数据创建一个对象,迭代键,并将键值对传递给assignString函数
var data = {
Hello: Hello,
World: World,
Foo: Foo,
Bar: Bar
}
Object.keys(data).forEach(key => assignString(data[key], key));
我认为基于字符串值动态创建变量的唯一方法是执行以下操作:
['Hello', 'World', 'Foo', 'Bar'].forEach(() => { assignString... })
or
[Hello, World, Foo, Bar].forEach(() => { assignString... })
var exampleStringValue = 'HELLO';
window[exampleStringValue] = exampleStringValue;
console.log(window.HELLO);
// or, since window is the global context in the browser
console.log(HELLO)
老实说,我不能说我能想出一个好的实践用例,但我不知道你的用例,所以这里没有判断:
我还想指出,我发现这个小库对于创建键与键名具有相同值的对象非常有用:。我发现它在React社区中被大量使用。使用新的ES6映射对象,我们可以在结构中创建名称/值对,然后将其转换为数组,因此forEach可以工作:
const vars = { Hello, World, Foo, Bar };
Object.keys(vars).forEach(key => assignString(vars[key], key));
// Variables that assignString will need:
var Hello = "var1", World = "var2", Foo = "var3", Bar = "var4";
// Map object that contains name of variables and strings that match variable name
var m = new Map([[Hello, "Hello"],[World,"World"],[Foo, "Foo"], [Bar, "Bar"]]);
// Turn Map into Array so forEach will work:
var a = Array.from(m);
// Call forEach which calls assingString and passes key name
// (variable name) and string value
a.forEach((value) => { assignString(value[0], value[1]); });
请参阅此提琴:因为变量名和字符串是等效的,所以无需将其传入两次。我宁愿传入变量的范围。您可以这样做,使其在您所在的任何范围内工作:
function assignString(scope, val){
scope[val] = val;
}
像
assignString(window, "Hello");
console.logHello==>Hello如果您发布assignString的代码并解释为什么需要这样做,这会很有帮助。此代码的执行将以未捕获的引用错误结束:赋值中的左侧无效…如果没有看到assignString,很难知道如何/是否这样做。@Pointy why你认为呢?好吧,OP在函数如何工作的含义上是不一致的。@Pointy你能给我一个赋值字符串函数的例子吗?根据OP问题,我真的不知道OP在说什么;它可以做上千种可能的事情。我不知道这些标识符是局部变量还是全局变量。这就是我的观点:你的答案可能是正确的,但它甚至可能不是很接近。@ Juhana,请考虑删除你的评论和投票,如果是你投下了票,因为我已经重新调整了我的解决方案,以匹配的情况。