私はいつも使っていて(typeof variable === "function")
、偶然見つけてjQuery.isFunction()
疑問に思っていました:
- typeof メソッドと jQuery のメソッドの違いは何ですか? 何が違うかだけでなく、
- typeof メソッドを使用するのが適切な場合と、jQuery のメソッドを使用するのが適切な場合はいつですか?
私はいつも使っていて(typeof variable === "function")
、偶然見つけてjQuery.isFunction()
疑問に思っていました:
jQueryの使用が少し遅いことを除けば、ほとんど違いはありません。ソースコードを参照してください。
isFunction: function( obj ) {
return jQuery.type(obj) === "function";
},
これは、別の関数を呼び出して、表示したものとまったく同じものを判別する関数を呼び出します:P
この場合、jQueryには文字通り利点がありません[またはその方法では、ライブラリのユースケースの90%]。Vanilla-JSを調べて、その機能のいくつかをチェックしてください:P
TLDR:これにはjQueryを使用しないでください...または何か。
これは、Vanilla JSがjQueryよりも約93%高速であることを示すベンチマークです:http://jsperf.com/jquery-isfunction-vs-vanilla-is-function。
違いはありません。jQuery は同じ概念を使用します。
// ...
isFunction: function( obj ) {
return jQuery.type(obj) === "function";
}
アップデート:
深く掘り下げた後、jQueryのメソッドがチェーンのメソッド onをstringisFunction
と比較していることがわかりました。これが、以前の例との違いであり、より遅い理由です。toString
Object.prototype
function() {}
[object Function]
typeof
isFunctionのjQueryソースコードは
isFunction: function( obj ) {
return jQuery.type(obj) === "function";
},
type: function( obj ) {
return obj == null ?
String( obj ) :
class2type[ core_toString.call(obj) ] || "object";
},
//...
jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "),
function(i, name) {
class2type[ "[object " + name + "]" ] = name.toLowerCase();
});
core_toString = Object.prototype.toString,
したがって、引数jQuery.isFunction
を呼び出すとがが返される場合にのみtrueを返します。Object.prototype.toString.call
[object Function]
違いは、JQuery が次と同等のものを呼び出し、"Function" 文字列トークンをチェックすることです。
var toString = Object.prototype.toString;
var func = function(){};
console.log(toString.call(func)); // "returns [object Function]"
一方、typof は単に「関数」を返します。
var fType = typeof func;
console.log(fType); // returns "function"