Mirando bajo el capó en UnderscoreJS, veo:¿Por qué UnderscoreJS usa toString.call() en lugar de typeof?
_.isFunction = function(obj) {
return toString.call(obj) == '[object Function]';
};
_.isString = function(obj) {
return toString.call(obj) == '[object String]';
};
_.isNumber = function(obj) {
return toString.call(obj) == '[object Number]';
};
Esto parece una elección extraña. ¿Por qué no usar simplemente typeof para determinar si un valor es una cadena, función o número? ¿Hay una ganancia de rendimiento al usar toString? ¿El tipo no es compatible con navegadores más antiguos?
'typeof' ha existido en todas las versiones de JavaScript desde la versión 1.1 en 1996. –