5.28 isFunction

5.28.1 语法

_.isFunction(object)

5.28.2 说明

如果object是一个函数,返回true。

5.28.3 代码示例

_.isFunction(alert); //=> true
_.isFunction(function(){}); //=> true
_.isFunction(1); //=> false

5.28.3 用typeof? (坑)

曾经的你我可能都这么用,不过的确存在一点小bug。

function isFunction(obj) {
    return typeof obj === 'function';
}
isFunction(function(){}); //=> true
isFunction(1); //=> false

//在IE8下试试?
alert(typeof alert === 'function');

var obj = document.createElement("object");
alert(typeof obj.getAttribute === 'function');

5.28.5 isFunction的实现

var isFunction = (function() {
    return "object" === typeof document.getElementById ? isFunction = function(fn) {
        try {
            return /^\s*\bfunction\b/.test("" + fn);
        } catch (x) {
            return false
        }
    } : isFunction = function(fn) {
        return "[object Function]" === Object.prototype.toString.call(fn);
    };
}());
alert(isFunction(alert));

5.28.6 相关链接

https://github.com/jashkenas/underscore/issues/1929 https://github.com/jashkenas/underscore/issues/1930 https://github.com/jashkenas/underscore/issues/2117 http://dbj.org/blog/2012/10/08/isfunction-that-works-in-ie-too/