.isFunction(a) vs typeof = = = "function"? JavaScript
je pense qu'il pourrait être la performance du cas - http://jsperf.com/comparing-underscore-js-isfunction-with-typeof-function/2
Et il semble que typeof
est plus rapide.. donc ma question est - ce qui est le plus approprié à utiliser?
2 réponses
Il n'y a aucune raison de ne pas utiliser typeof
.
non seulement il est plus rapide, mais le spécification ECMAScript assure que toutes les fonctions ont un type de "fonction" et que seul les fonctions peuvent avoir un type "fonction" :
Cet opérateur a été spécialement conçu pour obtenir le type d'une valeur, alors pourquoi ne pas l'utiliser ?
tout d'abord, Underscore n'utilise plus cette implémentation. Il optimise typeof
à moins que typeof /./
retourne function
, comme il l'a fait au moins versions plus anciennes de Chrome
Vous pouvez trouver dans le code source: http://underscorejs.org/underscore.js
// Optimize `isFunction` if appropriate.
if (typeof (/./) !== 'function') {
_.isFunction = function(obj) {
return typeof obj === 'function';
};
}
Nouveau jsperf: http://jsperf.com/comparing-underscore-js-isfunction-with-typeof-function/3
Il montre encore tout à fait un gain de performance dans les FF (mais Beaucoup moins que l'implémentation naïve que vous avez postée dans la question), ce qui est dû à la surcharge d'un appel de fonction vs seulement du code inlining.