こんな感じでいかが。
var type_of = function(o){
if ((t=typeof o)!="object") { return t; }
if (t===null) { return "null"; }
return Object.prototype.toString.apply(o).match(/\[object (.*?)\]/)[1];
};
クロスブラウザで同じ結果が得られるかは試せてません。コメント期待…。
Javascriptはtypeof([1,2,3])がobjectなところが香ばしいですね。