请考虑这个片段:
let variableName = 'internalVariable';
{
let internalVariable = 'whatever';
console.log(eval(propertyKey)); // prints 'whatever'
}
通过 variableName
中存储的字符串访问 internalVariable
有哪些选项?我希望有类似 scope[variableName]
的东西,但似乎没有类似的东西。
鉴于这种特殊情况,是否有使用 eval
的替代方案?
最佳答案
在需要动态访问诸如变量之类的东西的情况下,惯用的做法是使用一个对象并根据需要动态计算属性名称。
var obj = {};
obj[getPropertyName()] = "hello world";
在函数中用 var
、let
或 const
声明的变量确实作为对象的属性存在(函数的闭包) call),但 JavaScript 不提供任何将该事物作为对象引用的方法。使用 eval()
是可能的,但通常这是一个坏主意,因为在现代运行时系统中不会尝试运行时优化,因为 eval()
使这变得非常复杂。
在 JavaScript 中为变量添加别名的唯一方法是通过 arguments
对象,这很奇怪,因此在“严格”模式下明确不鼓励这样做。
[编辑] - 在下面的回复中:Bergi 的评论中,(通常不推荐使用)with
语句允许隐式引用对象属性,并且模块的 export
机制可以创建别名,尽管对我来说很难想象这在实际实践中是一件好事。
关于javascript - 通过字符串访问本地范围的变量——除了 eval 之外还有什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51367362/