如何判断JavaScript中的函数是否已定义?
我想做这样的事情
function something_cool(text, callback) {
alert(text);
if( callback != null ) callback();
}
但是它得到了一个
回调不是函数
未定义回调时发生错误。
如何判断JavaScript中的函数是否已定义?
我想做这样的事情
function something_cool(text, callback) {
alert(text);
if( callback != null ) callback();
}
但是它得到了一个
回调不是函数
未定义回调时发生错误。
当前回答
大多数(如果不是所有)前面的答案都有调用该函数的副作用
以下是最佳实践
你有函数
函数myFunction() { var x = 1; } 直接测试的方法
/ /直接的方式 if((typeof window.myFunction)=='function') alert('myFunction是函数') 其他的 alert('myFunction未定义'); 使用字符串,因此只能在一个位置定义函数名
/ / byString var strFunctionName = ' myFunction ' if((typeof window[strFunctionName])=='function') Alert (s+' is function'); 其他的 警报(s+'未定义');
其他回答
我正在寻找如何检查一个jQuery函数是否被定义,我没有找到它很容易。
也许你会需要它;)
if(typeof jQuery.fn.datepicker !== "undefined")
使用函数调用的可选链接,你可以做到以下几点:
function something_cool(text, callback) {
alert(text);
callback?.();
}
如果callback是一个函数,它将被执行。
如果callback为null或未定义,则不会抛出错误,也不会发生任何事情。
然而,如果callback是其他东西,例如字符串或数字,TypeError仍然会被抛出。
对于JavaScript新手,我不确定行为是否发生了变化,但如果没有定义可能函数,Jason Bunting(6年前)给出的解决方案将不起作用。
function isFunction(possibleFunction) {
return (typeof(possibleFunction) == typeof(Function));
}
这将抛出一个ReferenceError:可能函数没有定义的错误,因为引擎试图解析符号可能函数(正如在Jason的回答的评论中提到的)
为了避免这种行为,您只能传递要检查是否存在的函数的名称。所以
var possibleFunction = possibleFunction || {};
if (!isFunction(possibleFunction)) return false;
这将变量设置为您想要检查的函数,如果它没有定义,则设置为空对象,从而避免了上面提到的问题。
typeof callback === "function"
我可能会
try{
callback();
}catch(e){};
我知道有一个公认的答案,但没人这么建议。我不确定这是否符合惯用语的描述,但它适用于所有情况。
在较新的JavaScript引擎中,可以使用finally代替。