Javascript JS检查输入字符串是否为有效代码并运行输入

Javascript JS检查输入字符串是否为有效代码并运行输入,javascript,string,function,typeof,Javascript,String,Function,Typeof,所以我真的找不到太多关于这个的东西。我的想法是,我有一个用户输入(文本),我想在JS中检查它的代码是否有效,然后运行它 我知道我可以做if(typeof userInput==“function”){如果userInput实际上是一个函数,但此时用户输入只是一个字符串输入,所以我非常困惑,它还包含任何参数或其他代码 例如,输入可能是“alert('test')”,这将是有效的,我想运行它,但是类似“madeUpFunction(lol)”的内容将无效 如果我能让函数正常工作,而不是任何JS代码,

所以我真的找不到太多关于这个的东西。我的想法是,我有一个用户输入(文本),我想在JS中检查它的代码是否有效,然后运行它

我知道我可以做
if(typeof userInput==“function”){
如果
userInput
实际上是一个函数,但此时用户输入只是一个字符串输入,所以我非常困惑,它还包含任何参数或其他代码

例如,输入可能是
“alert('test')”
,这将是有效的,我想运行它,但是类似
“madeUpFunction(lol)”
的内容将无效


如果我能让函数正常工作,而不是任何JS代码,我会很高兴。

假设这是在浏览器中,并且您要检查的函数在全局范围内:

if (typeof window[userInput] === "function" ) {
    ...
}
您可以使用eval(“typeof”+input)来实现所需的功能。eval()函数的参数是字符串。如果字符串表示表达式,eval()将对表达式求值

var myFunc=function(){};
变量输入=提示(“输入输入字符串”);
if(评估(“类型”+输入)=“功能”){
document.getElementById('d1').innerHTML=“是的,这是一个函数”;
}
否则{
document.getElementById('d1').innerHTML=“不是函数”;
}

您可以提取字符串直到第一个
以获取函数名,然后使用
typeof eval(funcName)
测试它是否存在。然后使用构造函数确保语法对其余参数有效,而无需实际执行代码

然后,您可以返回执行用户输入内容的函数,但请注意,如果您决定执行该函数,可能会出现安全问题

函数解析函数调用(str){
var funcName=str.slice(0,str.indexOf(')(');
if(评估类型(funcName)=‘函数’){
返回新函数(str);
}否则{
抛出新错误(“无效函数名”);
}
}

console.log(parseFunctionCall(“console.log('hi')”);
描述有效函数?您尝试执行的操作相当于解析JavaScript语法。您可以让JavaScript运行时自己执行
eval()
,但这显然不是没有风险和复杂性的。字符串是字符串,它永远不能是函数。@MattCowley函数!==函数调用。您拥有什么和想要什么都不清楚。@Oriol我在问题中添加了一个示例。这很好,谢谢!但是如果我输入
console.log('test')
它没有检测到它?那是因为
控制台.log
正在选择一个不直接在
窗口上的函数。我已经更新为使用
eval
,但是。