所以我真的找不到这个。我的想法是我有一个用户输入(文本),我想在JS中检查它是否有效的代码然后运行它。
我知道如果if (typeof userInput === "function") {
实际上是一个函数我可以userInput
,但是此时用户输入只是一个字符串输入,所以我很卡住了,它还包含任何参数或其他代码。
例如,输入可能是"alert('test')"
且有效,我想运行该输入,但"madeUpFunction(lol)"
之类的内容无效。
如果我能让函数正常工作而不是任何JS代码,我感到高兴。
答案 0 :(得分:2)
您可以将字符串提取到第一个(
以获取函数名称,然后使用typeof eval(funcName)
测试它是否存在。然后使用Function
构造函数确保语法对其余参数有效,而不实际执行代码。
然后您可以返回执行用户输入内容的函数,但请注意,如果您决定执行该函数,则可能存在安全问题。
function parseFunctionCall(str) {
var funcName = str.slice(0, str.indexOf('('));
if (typeof eval(funcName) === 'function') {
return new Function(str);
} else {
throw new Error('Invalid function name');
}
}
console.log(parseFunctionCall("console.log('hi')"));
答案 1 :(得分:0)
您可以使用eval(“typeof”+输入)来实现您想要的效果。 eval()函数的参数是一个字符串。如果字符串表示表达式,则eval()计算表达式。
var myFunc = function(){};
var input = prompt('Enter input string');
if(eval("typeof "+input) === "function"){
document.getElementById('d1').innerHTML = "Yes it's a funtion";
}
else{
document.getElementById('d1').innerHTML = "Not a funtion";
}
<div id="d1">
</div>
答案 2 :(得分:-1)
假设这是在浏览器中,并且您要检查的功能是在全局范围内:
if (typeof window[userInput] === "function" ) {
...
}