GetTypeOf

Returns type of javascript object

by Alexey Demin

HTML

<textarea id="output"></textarea>

CSS

body, textarea {
    margin: 0;
    overflow:hidden;
}
textarea {
    width: 100vw;
    height: 100vh;
    overflow:hidden;
    resize: none;
}

JavaScript

var getTypeOf = function(obj) {
    if (typeof obj == "undefined") { return "undefined"; }
    if (obj === null) { return "null"; }
    return Object.getPrototypeOf(obj).constructor.name;
  },
  testData = [
  	{ value: undefined, displayValue: "undefined", expected: "undefined" },
  	{ value: null, displayValue: "null", expected: "null" },
  	{ value: {}, displayValue: "{}", expected: "Object" },
  	{ value: new Object(), displayValue: "new Object()", expected: "Object" },
  	{ value: [], displayValue: "[]", expected: "Array" },
  	{ value: new Array(), displayValue: "new Array()", expected: "Array" },
  	{ value: "", displayValue: "\"\"", expected: "String" },
  	{ value: new String(), displayValue: "new String()", expected: "String" },
  	{ value: 0, displayValue: "0", expected: "Number" },
  	{ value: 1, displayValue: "1", expected: "Number" },
  	{ value: Number.NaN, displayValue: "Number.NaN", expected: "Number" },
  	{ value: new Number(), displayValue: "new Number()", expected: "Number" },
  	{ value: true, displayValue: "true", expected: "Boolean" },
  	{ value: false, displayValue: "false", expected: "Boolean" },
  	{ value: new Boolean(), displayValue: "new Boolean()", expected: "Boolean" },
  	{ value: /^[0-9]+$/ig, displayValue: "/^[0-9]+$/ig", expected: "RegExp" },
  	{ value: new RegExp(), displayValue: "new RegExp()", expected: "RegExp" },
  	{ value: new Date(), displayValue: "new Date()", expected: "Date" }
  ];
  
testData.forEach(function(item, idx){
  var output = function(val){ 
  	var output = document.getElementById("output");
  	output.innerHTML = output.innerHTML + val + "\n"; 
  }
  output(`${item.displayValue} -> ${getTypeOf(item.value) !== item.expected ? "fail" : "success"}`);
});