Kind
A more precise version of JavaScript's typeof
!npm packagenpm-imgnpm-url !Build Statusbuild-imgbuild-url !Downloadsdownloads-imgdownloads-url !Issuesissues-imgissues-url !Code Coveragecodecov-imgcodecov-url !Semantic Releasesemantic-release-imgsemantic-release-url
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']);
//=> 'array'
Basic
// Objects that aren't *really* objects
kind(null); // "null"
kind([1, 2, 3]); // "array"
kind(arguments); // "arraylike"
kind(new Date()); // "date"
kind(document.getElementById('id')); // "element"
kind(document.getElementsByTagName('div')); // "nodelist"
// This one's actually just an object
kind({}); // "object"
// Also works on standard types
kind("text"); // "string"
kind(2); // "number"
kind(alert); // "function"
"Deep" option
You may add a second, boolean parameter to tellkind
to perform a deeper test for some types. For example, instead of "number" it could return "integer" or "float".kind(1); // "number"
kind(1, true); // "integer"
kind(1.21); // "number"
kind(1.21, true); // "float"
kind(evt); // "event"
kind(evt, true); // "mouseevent" (i.e. if the event was a click)
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
.length
propertynull
element
node
text
, comment
)nodelist
event
mouseevent
, keyboardevent
)regexp
date
error
errorevent
math
promise
set
url
(i.e. an instance of theURL()
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