Skip to content

Instantly share code, notes, and snippets.

@kirilloid
Last active July 29, 2022 19:42
Show Gist options
  • Save kirilloid/ab0a36f8d07f5f9ba1a54d15dcb8802b to your computer and use it in GitHub Desktop.
Save kirilloid/ab0a36f8d07f5f9ba1a54d15dcb8802b to your computer and use it in GitHub Desktop.
getType
function getType (value) {
let type = typeof value;
if (type === 'object') {
return value ? Object.prototype.toString.call(value).slice(8, -1) : 'null';
}
return type;
}
[NaN, 0, 1, Infinity, // numbers
null, undefined, false, 'str', // other primitives
new String('a'), new Boolean(true), // wrapped primitives
{}, [], new Map, new WeakSet(), // containers
/regex/, new Date(), // other custom objects
window, navigator, // native objects
function () {}, (() => {}), atob,// functions
Symbol(), // symbol
{[Symbol.toStringTag]: 'Custom'} // @@ToStringTag
].map(getType);
// and the result is
[
"number", "number", "number", "number", // numbers
"null", "undefined", "boolean", "string",// other primitives
"String", "Boolean", // wrapped primitives - notice the uppercase
"Object", "Array", "Map", "WeakSet", // containers
"RegExp", "Date", // other custom objects
"Window", "Navigator", // native objects
"function", "function", "function", // functions
"symbol", // symbol
"Custom", // @@ToStringTag
];
@kirilloid
Copy link
Author

kirilloid commented Sep 21, 2016

exotic objects like window & navigator return "Object" in pre-es5 engines (mostly IE8 and below)

@doasync
Copy link

doasync commented Aug 23, 2017

I'd better use type-detect instead. It's faster.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment