I have always used (typeof variable === "function")
and I stumbled across jQuery.isFunction()
and I was wondering:
There is almost no difference, other than that using jQuery is slightly slower. See the source code:
isFunction: function( obj ) {
return jQuery.type(obj) === "function";
},
which calls a function which calls another function to determine the exact same thing as what you showed :P
There is literally no advantage to jQuery in this case [or for that manner, 90% of the use-cases of the library]. Look into Vanilla-JS and check out some of its features :P
TLDR: Don't use jQuery for this...or anything.
Here's a benchmark showing you that Vanilla JS is roughly 93% faster than jQuery: http://jsperf.com/jquery-isfunction-vs-vanilla-is-function.
There's no difference. jQuery uses the same concept:
// ...
isFunction: function( obj ) {
return jQuery.type(obj) === "function";
}
Update:
After digging in deeper I found that jQuery's isFunction
method is comparing the toString
method of the Object.prototype
chain on function() {}
, to the string [object Function]
. This is the how it differs from your former example and the reason for it being slower than typeof
.
The jQuery source code for isFunction is
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,
hence jQuery.isFunction
returns true if and only if calling Object.prototype.toString.call
on its argument returns [object Function]
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With