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