kindjs

Precise type-checker for JavaScript

  • kindjs

Downloads in past

Stats

StarsIssuesVersionUpdatedCreatedSize
kindjs
1052.1.0a year ago9 years agoMinified + gzip package size for kindjs in KB

Readme

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 tell kind 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
- 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