javascript - 您可以使用变量名来引用对象而不使用 eval()
问题描述
所以,
我知道可以在对象上创建动态键。
const foo = 'bar';
const obj = {
[foo]: 'this is bar',
};
但是是否可以通过变量值引用对象。例如,如果我们有 3 个对象:
const obj1 = {}
const obj2 = {}
const obj3 = {}
还有一个包含他们名字的数组
const objects = ['obj1', 'obj2', 'obj3'];
我们可以遍历这些名称并引用它们的对象吗?这不起作用:
objects.forEach(obj => Object.assign(obj, { extended: true }));
但这将:
objects.forEach(obj => Object.assign(eval(obj), { extended: true }));
但是 Mozilla 的文档声明“永远不要使用 eval! ”
解决方案
答案是你不能。
eval
在 JS 中,除非您(或非常相似的Function
构造函数),否则无法动态访问或创建变量。
尽管在全局范围内创建的变量 withvar
将成为全局对象的属性,并且您可以在其上访问它们,但也不推荐这样做(由于 arisig with 的问题var
,使用保留名称等),并且仅在全局范围内有效范围(这更糟)。
您可以做的最好的事情是将这些变量放入一个对象中,这样您就可以动态地访问它们。JS 变量对此并不好。
推荐阅读
- javascript - 迷你射击游戏命中功能
- php - 使用 .htaccess 隐藏 localhost php 路径
- mysql - 创建表时,右括号在此位置是无效输入
- python - 在 Python 中绘制复值函数的实部
- spring-boot - 不绑定 ==> Consul KV + Kotlin Spring Boot @ConfigurationProperties @ConstructorBinding
- reactjs - 盖茨比中 this.props.history.push 的等价物是什么?
- android - 如何在 Autocomple.intentBuilder 中过滤城市
- laravel - 如何自定义 tcpdf 页面大小?
- json - Django自动将文本字段中的双引号转换为单引号
- invariants - 如何找到从中心开始的方阵螺旋遍历的循环不变量