从javascript字符串中提取变量以创建eval()范围

从javascript字符串中提取变量以创建eval()范围,javascript,eval,Javascript,Eval,我有一个应用程序,管理员可以使用JavaScript编写自己的表达式,如果某些情况匹配或不匹配 此时,我创建了一个环境,用户可以在其中输入以下内容: global.myVariable.d > 10 && global.myOtherVariable.w < 5 global.myVariable.d>10&&global.myOtherVariable.w10&&global.myOtherVariable.w

我有一个应用程序,管理员可以使用JavaScript编写自己的表达式,如果某些情况匹配或不匹配

此时,我创建了一个环境,用户可以在其中输入以下内容:

global.myVariable.d > 10 && global.myOtherVariable.w < 5
global.myVariable.d>10&&global.myOtherVariable.w<5
我将调用
eval(“global.myVariable.d>10&&global.myOtherVariable.w<5”)

如果我没有设置包含所有变量的全局对象,eval将抛出一个错误(global.myVariable未定义)

但是在全局对象中设置所有可能的键,以便它能够匹配所有可能的myVariables是一项艰巨的任务,因此我只想设置特定eval字符串中需要的那些键

有没有一种聪明的方法可以从这样的javascript字符串中过滤变量? 当然,在全球金融危机之后的一切。直到。可以是正则表达式,但是全局[“myVariable”]呢 或者更复杂的符号,比如
let mondial=global;mondial.myVariable


如果我知道询问'myVariable',我可以创建全局{}调用eval字符串之前。

最好的方法是将
global
作为代理。如果
global.myVariable.d
未定义,您希望
global.myVariable
返回什么?然后eval可以计算为“false”,但这就是我的意思:我需要检查eval字符串,因此,我可以准备全局对象,使字符串的计算结果不会出错。是否要为所有未设置的属性获取默认值,或仅获取
false
?在第二种情况下,您可以简单地将
eval
函数封装在
try{eval('…');}catch(e){}
块中,我想bergi已经理解了。在调用“eval”之前,我想知道全局对象应该是什么样的,因此我的示例应该由此解决方案读取,并返回: