Determining Object Type with MooTools’ typeOf
One thing about JavaScript I dislike is the vagueness of what the typeof operator returns. Pass typeof an array? You get "object" back (which it is, but a more concise answer would be helpful). Pass typeof a Date object? You get "object" again. What if there was a better way of determining an object's descriptive type? That's where the typeOf function within MooTools Core comes into play.
typeOf Source and Usage
The typeOf function is actually quite short:
var typeOf = this.typeOf = function(item){
if (item == null) return 'null';
if (item.$family) return item.$family();
if (item.nodeName){
if (item.nodeType == 1) return 'element';
if (item.nodeType == 3) return (/\S/).test(item.nodeValue) ? 'textnode' : 'whitespace';
} else if (typeof item.length == 'number'){
if (item.callee) return 'arguments';
if ('item' in item) return 'collection';
}
return typeof item;
};
typeOf checks for specific properties on the object in question to determine its descriptive type. Simple, right? Note the $family() check within typeOf; each Type (Array, Function, Date, etc.) instance is given a $family method which returns its type. Let's try a few typeOf calls:
typeof document.body; // returns "object" typeOf(document.body); // returns "element" typeof new Date(); // returns "object" typeOf(new Date()); // returns "date" typeof []; // returns "object" typeOf([]); // returns "array"
typeOf is an awesome utility function, right? Getting a more detailed object type than simply "object" can be hugely help in validating the object before using it. typeOf is just another awesome utility within the MooTools JavaScript framework.
I use the regular “typeOf” to determine if classes are present, but the MooTools typeOf is much better, and great for making sure variables are the correct type. I wish more plugin coders would return robust error messages with these kinds of checks.
Nice one !!!!!!
Anyone knows if Mootools’
typeOfis more reliable than standardtypeofwhen I want to check if something is a function or not?var a = (function() { return true; });
var b = { name: 'value' };
// typeof(a) == typeOf(a) == 'function' is always TRUE?
// typeof(b) == typeOf(b) != 'function' is always TRUE?