53

我认为这可能只是性能案例 - http://jsperf.com/comparing-underscore-js-isfunction-with-typeof-function/2

而且似乎typeof更快..所以我的问题是 - 哪个更适合使用?

4

2 回答 2

101

没有理由不使用typeof.

它不仅更快,而且ECMAScript 规范确保所有函数都具有“函数”类型,并且只有函数可以具有“函数”类型:

在此处输入图像描述

这个运算符是专门为获取值的类型而设计的,那么为什么不使用它呢?

于 2013-06-14T12:10:25.123 回答
13

首先,Underscore 不再使用该实现。它优化到typeof除非typeof /./返回function,因为它至少在旧版本的 Chrome中所做的那样

您可以在源代码中找到它:http: //underscorejs.org/underscore.js

// Optimize `isFunction` if appropriate.
  if (typeof (/./) !== 'function') {
    _.isFunction = function(obj) {
      return typeof obj === 'function';
    };
  }

新的 jsperf:http: //jsperf.com/comparing-underscore-js-isfunction-with-typeof-function/3

它在 FF 中仍然显示出相当大的性能损失(但比您在问题中发布的幼稚实现要少得多),这是由于函数调用的开销与仅内联代码的开销。

于 2013-06-14T12:16:42.650 回答