Да предположим, че имам някаква променлива, която е дефинирана по следния начин:
var a = function() {/* Statements */};
Искам функция, която проверява дали типът на променливата е функционален, т.е. :
function foo(v) {if (v is function type?) {/* do something */}};
foo(a);
Как мога да проверя дали променливата a
е от тип Функция
по начина, дефиниран по-горе?
if (typeof v === "function") {
// do something
}
Със сигурност начинът на underscore е по-ефективен, но най-добрият начин за проверка, когато ефективността не е проблем, е написан на страницата на underscore, свързана от @Paul Rosania.
Вдъхновена от underscore, крайната функция isFunction е следната:
function isFunction(functionToCheck) {
return functionToCheck && {}.toString.call(functionToCheck) === '[object Function]';
}
Underscore.js използва по-сложен, но много ефективен тест:
_.isFunction = function(obj) {
return !!(obj && obj.constructor && obj.call && obj.apply);
};
Вижте: http://jsperf.com/alternative-isfunction-implementations
EDIT: актуализираните тестове показват, че typeof може да е по-бърз, вж. http://jsperf.com/alternative-isfunction-implementations/4