JavaScript の関数が定義されているかどうかはどうやってわかりますか?
私はこのようなことをしたい
function something_cool(text, callback) {
alert(text);
if( callback != null ) callback();
}
しかし、それは私を取得します
コールバックは関数ではありません
コールバックが定義されていない場合のエラー。
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")
callback は (それ自体で) 、、、または のいずれか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')
typeof(callback) == "function"
function something_cool(text, callback){
alert(text);
if(typeof(callback)=='function'){
callback();
};
}
if ('function' === typeof callback) ...
試す:
if (!(typeof(callback)=='undefined')) {...}
@Venkat Sudheer Reddy Aedama が言及したライブラリのソース、underscorejs を見ると、次のことがわかります。
_.isFunction = function(obj) {
return typeof obj == 'function' || false;
};
これは私のヒント、ヒントの答えです:>
これを試して:
callback instanceof Function
jQuery 関数が定義されているかどうかを確認する方法を探していましたが、簡単には見つかりませんでした。
おそらくそれが必要かもしれません;)
if(typeof jQuery.fn.datepicker !== "undefined")
http://underscorejs.orgを使用する場合、次のようになります: http://underscorejs.org/#isFunction
_.isFunction(callback);
1 行のソリューション:
function something_cool(text, callback){
callback && callback();
}