/ Published in: JavaScript
                    
                                        
Brilliant solution using Object.prototype.toString()
Test cases included (commented out)
                Test cases included (commented out)
                            
                                Expand |
                                Embed | Plain Text
                            
                        
                        Copy this code and paste it in your HTML
/* Robust typeof v3.0
*
* This work is licensed under a Creative Commons Attribution 3.0 Unported License
* http://creativecommons.org/licenses/by/3.0/
*
* Author: Andy Harrison, http://dragonzreef.com/
* Date: 16 September 2011
*/
//based on the brilliant solution of using Object.prototype.toString() from
// http://perfectionkills.com/instanceof-considered-harmful-or-how-to-write-a-robust-isarray/
function typeOf(o)
{
var undefined;
if(o === undefined) return "undefined";
if(o === null) return "null";
return Object.prototype.toString.call(o).replace(/\[object (.*?)\]/, "$1");
}
function isUndefined(o){ return typeOf(o) == "undefined"; }
function isNull(o){ return typeOf(o) == "null"; }
function isBoolean(o){ return typeOf(o) == "Boolean"; }
function isNumber(o){ return typeOf(o) == "Number"; }
function isString(o){ return typeOf(o) == "String"; }
function isRegExp(o){ return typeOf(o) == "RegExp"; }
function isDate(o){ return typeOf(o) == "Date"; }
function isArray(o){ return typeOf(o) == "Array"; }
function isFunction(o){ return typeOf(o) == "Function"; }
function isObject(o){ return typeOf(o) == "Object"; }
Object.prototype.isBoolean = function(){ return typeOf(this) == "Boolean"; };
Object.prototype.isNumber = function(){ return typeOf(this) == "Number"; };
Object.prototype.isString = function(){ return typeOf(this) == "String"; };
Object.prototype.isRegExp = function(){ return typeOf(this) == "RegExp"; };
Object.prototype.isDate = function(){ return typeOf(this) == "Date"; };
Object.prototype.isArray = function(){ return typeOf(this) == "Array"; };
Object.prototype.isFunction = function(){ return typeOf(this) == "Function"; };
Object.prototype.isObject = function(){ return typeOf(this) == "Object"; };
if(!Array.isArray) Array.isArray = isArray;
/*
//test all data types
//IE 8 and older give "Object" as the type of an HTMLDivElement
var u;
function f(){}
var testValues = [
{value: u, code: "= undefined", expected: "undefined"},
{value: null, code: "= null", expected: "null"},
{value: true, code: "= true", expected: "Boolean"},
{value: (new Boolean), code: "= new Boolean", expected: "Boolean"},
{value: 1, code: "= 1", expected: "Number"},
{value: (new Number), code: "= new Number", expected: "Number"},
{value: "s", code: "= \"s\"", expected: "String"},
{value: (new String), code: "= new String", expected: "String"},
{value: /r/, code: "= /r/", expected: "RegExp"},
{value: (new RegExp), code: "= new RegEx)", expected: "RegExp"},
{value: (new Date), code: "= new Date", expected: "Date"},
{value: [], code: "= []", expected: "Array"},
{value: [0,1], code: "= [0,1]", expected: "Array"},
{value: (new Array), code: "= new Array", expected: "Array"},
{value: f, code: "function f(){}", expected: "Function"},
{value: function(){}, code: "= function(){}", expected: "Function"},
{value: (new Function), code: "= new Function", expected: "Function"},
{value: {}, code: "= {}", expected: "Object"},
{value: (new Object), code: "= new Object", expected: "Object"},
{value: (new f), code: "= new f", expected: "Object"},
{value: document.createElement("div"), code: "= document.createElement(\"div\")", expected: "HTMLDivElement"}
];
var t = "<table><tr><th>Value</th><th>Code</th><th>Expected</th><th>Result</th></tr>";
var c;
for(var i=0; i<testValues.length; i++)
{
c = " style=\"color:green\"";
if(testValues[i].expected != typeOf(testValues[i].value)) c = " style=\"color:red\"";
t += "<tr><td>"+testValues[i].value+"</td><td>"+testValues[i].code+"</td><td>"+testValues[i].expected+"</td><td"+c+">"+
typeOf(testValues[i].value)+"</td></tr>";
}
t += "</table>";
document.getElementById("log").innerHTML += t;
*/
URL: http://perfectionkills.com/instanceof-considered-harmful-or-how-to-write-a-robust-isarray/
Comments
 Subscribe to comments
                    Subscribe to comments
                
                