Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从传递给函数的字符串调用javascript函数_Javascript_String_Node.js_Function_Eval - Fatal编程技术网

从传递给函数的字符串调用javascript函数

从传递给函数的字符串调用javascript函数,javascript,string,node.js,function,eval,Javascript,String,Node.js,Function,Eval,我在这里看到了许多类似性质的问题,但没有一个适合我所拥有的特定事物(我使用node.js)。以这里的代码为例 function command_call(message, socket) { if (message.length > 1){ var func = message[0]; var string = message.slice(1); var string = string.join(' ')} else{ var func =

我在这里看到了许多类似性质的问题,但没有一个适合我所拥有的特定事物(我使用node.js)。以这里的代码为例

function command_call(message, socket) {
    if (message.length > 1){
    var func = message[0];
    var string = message.slice(1);
    var string = string.join(' ')}
    else{
    var func = message[0];
    var string = '';};
    if(func[0] == '$') {
    (eval(func.slice(1)))(string, socket);};
};

function say(string, socket){
    socket.write(string)};

如果传入命令调用的消息为“$say hi”,则调用函数say并返回“hi”。但是,如果放入eval的函数不存在,它就会崩溃。例如,如果传递给命令_调用的消息是“$example blah”,它将尝试评估“example”。基本上,我需要它在评估函数之前检查函数是否存在。是的,我想使用eval,除非在node中有更好的方法。同样,这是在node.js中,您应该创建函数的对象并使用索引符号:

var methods = { 
    $say: function() { ... }
};

if (!methods.hasOwnProperty(func))
    // uh oh
else
    methods[func]();

不需要检查“hasOwnProperty”。我们可能不在乎这个。我们只是想看看这个方法是否存在。比如:if(方法[func])。另外,$say需要加引号。应该是“$say”。是的,事实上这会起作用。不过看起来很奇怪。如果你需要的话,这里有一个简单的工具来检查这些东西@PhillipBurch:
$
是JS标识符的合法字符(它是由jQuery推广的)。
hasOwnProperty
检查可防止恶意输入调用继承的方法。