1. ホーム
  2. javascript

[解決済み] 変数が関数型かどうかのチェック

2022-03-19 21:30:53

質問

次のように定義された任意の変数があるとする。

var a = function() {/* Statements */};

変数の型が関数型であるかどうかをチェックする関数が欲しい。

function foo(v) {if (v is function type?) {/* do something */}};
foo(a);

という変数があるかどうかを確認するにはどうすればよいですか? a が型である場合 Function のように定義されていますか?

どのように解決するのですか?

確かにunderscoreの方法の方が効率的ですが、効率が問題でない場合の最適なチェック方法は、@Paul Rosaniaのリンク先のunderscoreのページに書かれています。

underscoreに触発され、最終的にisFunction関数は以下のようになりました。

function isFunction(functionToCheck) {
 return functionToCheck && {}.toString.call(functionToCheck) === '[object Function]';
}

備考 : この解決策は、非同期関数、ジェネレーター、プロキシされた関数には使えません。最新の解決策については、他の回答を参照してください。