如何判断JavaScript中的函数是否已定义?
我想做这样的事情
function something_cool(text, callback) { alert(text); if( callback != null ) callback(); }
但它让我了
回调不是一个功能
未定义回调时出错.
typeof callback === "function"
所有当前的答案都使用了一个文字字符串,如果可能的话,我更喜欢在我的代码中没有这个字符串 - 这不会(并提供有价值的语义含义,引导):
function isFunction(possibleFunction) { return typeof(possibleFunction) === typeof(Function); }
就个人而言,我尝试减少代码中挂着的字符串数量......
此外,虽然我知道这typeof
是一个操作符而不是一个函数,但使用语法使其显示为后者几乎没有什么害处.
if (callback && typeof(callback) == "function")
需要注意的是回调(本身)的计算结果为false
,如果是undefined
,null
,0
,或false
.比较null
过于具体.
如果未定义变量,那么判断函数是否实现的方法也会失败,因此我们使用了更强大的函数来支持接收字符串:
function isFunctionDefined(functionName) { if(eval("typeof(" + functionName + ") == typeof(Function)")) { return true; } } if (isFunctionDefined('myFunction')) { myFunction(foo); }
尝试:
if (typeof(callback) == 'function')
JavaScript新手我不确定行为是否已经改变,但是如果没有定义可能的函数,Jason Bunting(6年前)给出的解决方案将不起作用.
function isFunction(possibleFunction) { return (typeof(possibleFunction) == typeof(Function)); }
这将引发ReferenceError: possibleFunction is not defined
错误,因为引擎试图解析符号possibleFunction(如对Jason的回答中提到的那样)
要避免此行为,您只能传递要检查的函数的名称(如果存在).所以
var possibleFunction = possibleFunction || {}; if (!isFunction(possibleFunction)) return false;
这将变量设置为要检查的函数,或者如果未定义,则将空对象设置为空对象,从而避免上述问题.