_.isFunction(a) void typeof a === 'function'? Javascript
Я думаю, что это может быть только случай производительности - http://jsperf.com/comparing-underscore-js-isfunction-with-typeof-function/2
И кажется, что typeof
быстрее.. поэтому мой вопрос - что более целесообразно использовать?
Ответы
Ответ 1
Нет причин не использовать typeof
.
Это не только быстрее, но спецификация ECMAScript гарантирует, что все функции имеют тип "функции" и что только функции могут иметь тип "функции":
![enter image description here]()
Этот оператор был специально разработан для получения типа значения, поэтому почему бы не использовать его?
Ответ 2
Во-первых, 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 (но МНОГО меньше, чем наивная реализация, которую вы опубликовали в вопросе), что связано с накладными расходами на вызов функции, а не только на код.