_.isFunction(a)与==='function'的类型?JavaScript的

Kos*_*ika 50 javascript performance typeof underscore.js

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

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

Den*_*ret 97

没有理由不使用typeof.

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

在此输入图像描述

此运算符专门用于获取值的类型,为什么不使用它?

  • @Kosmetika我没有收到您的评论. (8认同)
  • 出色地。一切都很完美,这是正确的答案,但我认为使用 _.isFunction() 对于阅读源代码的新手来说更容易理解。此外,性能上也没有太大差异。 (2认同)

Dog*_*ert 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';
    };
  }
Run Code Online (Sandbox Code Playgroud)

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

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