Javascript 如何判断函数是否为空?

Javascript 如何判断函数是否为空?,javascript,jquery,Javascript,Jquery,我正在编写一个web应用程序(老实说,我不知道如果没有stackoverflow我会怎么做),但下面是我正在做的 我的用户可以定义自定义函数,有人向我指出应该有一种方法来警告用户该函数是空的 例如,用户可以将其函数编写为如下所示 cFunctionRun: function () {} 遗憾的是,我无法控制函数是如何创建的,这意味着这很可能发生 所以现在我必须找到一种方法告诉用户这个函数不会做任何事情,因为它什么也做不了。如果这是不可能的,那很好,但我想问一下也无妨 有关cFunctionRu

我正在编写一个web应用程序(老实说,我不知道如果没有stackoverflow我会怎么做),但下面是我正在做的

我的用户可以定义自定义函数,有人向我指出应该有一种方法来警告用户该函数是空的

例如,用户可以将其函数编写为如下所示

cFunctionRun: function () {}
遗憾的是,我无法控制函数是如何创建的,这意味着这很可能发生

所以现在我必须找到一种方法告诉用户这个函数不会做任何事情,因为它什么也做不了。如果这是不可能的,那很好,但我想问一下也无妨


有关cFunctionRun部分的更多信息,请查看此stackOverflow问题

您可以在函数上使用
toString
,并删除空格以查看函数是否为空

var isEmpty = cFunctionRun.toString().replace(/\s+/g, '') === 'function(){}';

我认为这样做应该奏效:

假设你有这样的东西:

var functions = {
    aFunctionRun: function () {return false;}
    bFunctionRun: function ('foobar') {}
    cFunctionRun: function () {}
}
请尝试以下代码:

function isEmpty(function){
    // Get the string from the function;
    var funcString = function.toString();
    // Cut off the part before the actual content of the function
    funcString = funcString.substr(funcString .indexOf(')'))
        .replace(/function|[(){};]/g,'') // remove the function keyword, and the following characters: (){};
        .trim();                         // remove any leading / trailing whitespaces and 
    return funcString === '';            //check if it's an empty string.
}

isEmpty(functions.aFunctionRun); // returns false
isEmpty(functions.bFunctionRun); // returns true
isEmpty(functions.cFunctionRun); // returns true

你说“很遗憾,我无法控制函数是如何创建的”是什么意思?你的意思是不能在函数创建时检查它吗?我不确定这是否在所有情况下都有效,所以我不想给出答案,但至少在Chrome中,你可以做
functionName.toString()
,然后从那里处理它。。。给你一个起点least@Rasmus是的,我无法在创建函数时检查它。这有点烦人。@BLSully你能帮我进一步理解吗。我不太明白。@RobertE.McIntosh:见Cerburs的答案。这是我所说的扩展版本:函数(){/*Test*/}} CureLuu:如果我们必须考虑注释,是单行、嵌套或不正确嵌套(<代码> /*Fo/*Bar */FoBOAR */<代码>),这将是一个很难解析的问题。还有<代码>函数MyFu函(){}。和
函数(foo,bar){}
@KevinB:应该这样做。@vsync:如果括号之间有空格怎么办?如果我在IE7中尝试这样做:
var a=function(){}
,后跟:
a.toString()
,返回
“function(){}”
。没问题。regex替换也一样。感谢您的测试,非常感谢。