javascript - 通过字符串访问局部范围的变量——除了 eval 之外的任何东西?
问题描述
请考虑这个片段:
let variableName = 'internalVariable';
{
let internalVariable = 'whatever';
console.log(eval(propertyKey)); // prints 'whatever'
}
internalVariable
通过存储在中的字符串访问我有哪些选择variableName
?我希望有类似的东西scope[variableName]
,但似乎没有类似的东西。
鉴于这种特殊情况,是否有任何替代方法可以使用eval
?
解决方案
在需要动态访问变量之类的东西的情况下,惯用的做法是使用一个对象并根据需要动态计算属性名称。
var obj = {};
obj[getPropertyName()] = "hello world";
在函数中用var
、let
或声明的变量const
确实作为对象之类的属性存在(函数调用的闭包),但 JavaScript 没有提供任何方法将该事物称为对象。使用eval()
是可能的,但通常这是一个坏主意,因为在现代运行时系统中没有尝试运行时优化,因为这eval()
会变得非常复杂。
JavaScript 中变量别名的唯一方法是通过arguments
对象,这非常奇怪,以至于在“严格”模式下明确不鼓励使用。
[编辑] - 在下面的 Bergi 评论中,(通常不推荐使用的)with
语句允许对对象属性的隐式引用,并且export
模块的机制可以创建别名,尽管对我来说很难想象这在实际实践中是一件好事。
推荐阅读
- c - 如何从文件或输入中删除除十六进制之外的所有内容?
- sql-server - 如何使用 SQL 遍历 XML 字段中的所有父元素和子元素
- javascript - setTimeout 的实际延迟可能更短吗?
- excel - 查找一行中的值,然后在excel中提取另一行中的值
- c# - Unity3D 中的视频屏幕录像机
- npm - node-bigcommerce 获取和发布路由
- javascript - 如何通过解构赋值将数据绑定到这个?
- google-apps-script - 使用 Apps 脚本将公式插入 Google 表格列
- mvvm - 如何将视图模型中的单个变量绑定到视图
- c# - 一旦玩家离开对撞机门区域,我如何触发一些动作?