Looking under the hood in UnderscoreJS, I see:
_.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]';
};
This seems like an odd choice. Why not just use typeof to determine whether a value is a string, function, or number? Is there a performance gain by using toString? Is typeof not supported by older browsers?
Well actually this is because it is faster to check the
[[Class]]by checking withtoString. Also there could be less mistakes, since toString gives you the exact Class …check this :
You could see the benchmark for underscore typeof vs toString here :
http://jsperf.com/underscore-js-istype-alternatives
Also there are some github issues with better explaination :
https://github.com/documentcloud/underscore/pull/332
https://github.com/documentcloud/underscore/pull/321
EDIT 1 :
You could also check this great article :
http://javascriptweblog.wordpress.com/2011/08/08/fixing-the-javascript-typeof-operator/