将字符串转换为变量名(不使用eval)

3

我想知道有没有办法将字符串转换为变量名而不使用eval。

我在文件中声明了以下json:

{
    "fields": {
        "usr_language": {"var": "this.$i18n.locale", "value": null},
        "token": {"var": "googleUser.getAuthResponse().id_token", "value": null}
    }
}

当我在组件内部导入时,我想访问fields.usr_language.alias。如果不使用eval,它会返回字符串“this.$i18n.locale”。有没有不使用eval获取变量值的方法?在这种情况下使用eval是否不安全?

1
为什么它一开始就是一个字符串? - Andreas
1
这听起来像是一个糟糕的想法。如果你的文本与实际代码不匹配,你将开始出现运行时语法和/或引用错误。而且由于这是文本,你甚至不能使用任何广泛使用的工具来检查其正确性。 - VLAZ
@VLAZ 我这样做是因为我想要具有动态模式的架构,可以与我的应用程序交互。 - h3rm3s
2
@h3rm3s为什么不把你的变量作为某个对象的属性呢? - VLAZ
@VLAZ,你的意思是在全局对象中拥有这些变量,并通过名称在JSON文件中访问它们吗? - h3rm3s
显示剩余11条评论
2个回答

0

这对我有用:https://www.educative.io/answers/eval-vs-function-in-javascript

我有一个以字符串形式表示的数组名称,并希望获取具有相同名称的数组。Eval() 能够实现,但是它是“邪恶”的,应该/必须避免使用。使用 Function() 就可以了。

  const thisFileName = "aStringOfSomeFileName";
  const arrayName = "someString";

  eval(arrayName);

这个方案起作用了:

 const categoryArray = Function("return " + arrayName)();

然后我可以从我正在查找的数组内部获取我想要的对象:

 const indexOfObject = categoryArray.findIndex(object => {
            return object.filename === thisFileName;
        });

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接