329

JavaScript の関数が定義されているかどうかはどうやってわかりますか?

私はこのようなことをしたい

function something_cool(text, callback) {
    alert(text);
    if( callback != null ) callback();
}

しかし、それは私を取得します

コールバックは関数ではありません

コールバックが定義されていない場合のエラー。

4

22 に答える 22

525
typeof callback === "function"
于 2008-09-17T17:51:50.217 に答える
247

現在の回答はすべてリテラル文字列を使用していますが、可能であればコードに含めないことを好みます。

function isFunction(possibleFunction) {
  return typeof(possibleFunction) === typeof(Function);
}

個人的には、コードにぶら下がっている文字列の数を減らそうとしています...


また、 が関数ではなく演算子であることは承知してtypeofいますが、後者のように見える構文を使用しても害はほとんどありません。

于 2008-09-17T18:08:34.467 に答える
18
if (callback && typeof(callback) == "function")

callback は (それ自体で) 、、、または のいずれかfalseに評価されることに注意してください。と比較することは、過度に具体的です。undefinednull0falsenull

于 2008-09-17T18:05:36.220 に答える
9

関数が実装されているかどうかを判断するこれらのメソッドは、変数が定義されていない場合にも失敗するため、文字列の受信をサポートするより強力なものを使用しています。

function isFunctionDefined(functionName) {
    if(eval("typeof(" + functionName + ") == typeof(Function)")) {
        return true;
    }
}

if (isFunctionDefined('myFunction')) {
    myFunction(foo);
}
于 2010-09-21T16:52:52.827 に答える
7

試す:

if (typeof(callback) == 'function')
于 2008-09-17T17:52:13.837 に答える
5
typeof(callback) == "function"
于 2008-09-17T17:53:46.797 に答える
4
function something_cool(text, callback){
    alert(text);
    if(typeof(callback)=='function'){ 
        callback(); 
    };
}
于 2008-09-17T17:59:42.477 に答える
4
if ('function' === typeof callback) ...
于 2008-09-17T22:50:31.887 に答える
3

試す:

if (!(typeof(callback)=='undefined')) {...}
于 2008-09-17T17:54:40.320 に答える
2

@Venkat Sudheer Reddy Aedama が言及したライブラリのソース、underscorejs を見ると、次のことがわかります。

_.isFunction = function(obj) {
  return typeof obj == 'function' || false;
};

これは私のヒント、ヒントの答えです:>

于 2016-04-16T21:15:38.797 に答える
2

これを試して:

callback instanceof Function
于 2012-05-09T22:02:38.890 に答える
1

jQuery 関数が定義されているかどうかを確認する方法を探していましたが、簡単には見つかりませんでした。

おそらくそれが必要かもしれません;)

if(typeof jQuery.fn.datepicker !== "undefined")
于 2015-06-04T14:51:51.957 に答える
1

http://underscorejs.orgを使用する場合、次のようになります: http://underscorejs.org/#isFunction

_.isFunction(callback);
于 2015-01-28T21:01:46.950 に答える
-2

1 行のソリューション:

function something_cool(text, callback){
    callback && callback();
}
于 2016-01-18T20:08:50.943 に答える