Kind
A more precise version of JavaScript's typeof
Description
kind()
returns a useful name for a variable's type. It breaks down objects into more precise terms: array, null, element, etc.
Examples:
Input | typeof | kind |
---|
[1, 2, 3] | "object" | "array" |
null | "object" | "null" |
new Promise(() => null) | "object" | "promise" |
document.getElementById('id') | "object" | "element" |
document.getElementsByTagName('div') | "object" | "nodelist" |
document.createTextNode('') | "object" | "node" |
new Date() | "object" | "date" |
{} | "object" | "object" (if no special type was detected — see full list below) |
Install
yarn: yarn add kindjs
npm: npm install kindjs
Usage
import kind from 'kindjs';
kind(['hello', 'world']);
Basic
kind(null);
kind([1, 2, 3]);
kind(arguments);
kind(new Date());
kind(document.getElementById('id'));
kind(document.getElementsByTagName('div'));
kind({});
kind("text");
kind(2);
kind(alert);
"Deep" option
You may add a second, boolean parameter to tell kind
to perform a deeper test for some types. For example, instead of "number" it could return "integer" or "float".
kind(1);
kind(1, true);
kind(1.21);
kind(1.21, true);
kind(evt);
kind(evt, true);
A complete list is noted below
Supported types
- All standard types normally returned by
typeof
:
function
, undefined
, boolean
, symbol
string
- Deep option returns either
string
or emptystring
number
- Deep option returns either
integer
or float
array
arraylike
- A non-array object with a
.length
property
null
element
node
- Deep options from this list (e.g.
text
, comment
)
nodelist
event
- Deep options from this list (e.g.
mouseevent
, keyboardevent
)
regexp
date
error
errorevent
math
promise
set
url
(i.e. an instance of the URL()
constructor)urlsearchparams
map
Features
- Works with any type, not just objects
- Always returns a simple lowercase string, just like the native
typeof
- Handles undefined or undeclared variables
- Optimized to check for the most common types first
- Excellent browser support, including many very old browsers
- IE 6+ (and maybe older)
- Chrome
- Firefox
- Safari
- Android 1+
- Opera (pre-Blink)
- Netscape 4 (in theory!)
- Probably anything that runs JavaScript and supports regular expressions