type-detect (4.0.8)
Installation
registry=npm install type-detect@4.0.8"type-detect": "4.0.8"About this package
type-detect
Improved typeof detection for node and the browser.
| Supported Browsers | |||||
|---|---|---|---|---|---|
| ✅ | ✅ | ✅ | ✅ | 9, 10, 11 | |
What is Type-Detect?
Type Detect is a module which you can use to detect the type of a given object. It returns a string representation of the object's type, either using typeof or @@toStringTag. It also normalizes some object names for consistency among browsers.
Why?
The typeof operator will only specify primitive values; everything else is "object" (including null, arrays, regexps, etc). Many developers use Object.prototype.toString() - which is a fine alternative and returns many more types (null returns [object Null], Arrays as [object Array], regexps as [object RegExp] etc).
Sadly, Object.prototype.toString is slow, and buggy. By slow - we mean it is slower than typeof. By buggy - we mean that some values (like Promises, the global object, iterators, dataviews, a bunch of HTML elements) all report different things in different browsers.
type-detect fixes all of the shortcomings with Object.prototype.toString. We have extra code to speed up checks of JS and DOM objects, as much as 20-30x faster for some values. type-detect also fixes any consistencies with these objects.
Installation
Node.js
type-detect is available on npm. To install it, type:
$ npm install type-detect
Browsers
You can also use it within the browser; install via npm and use the type-detect.js file found within the download. For example:
<script src="./node_modules/type-detect/type-detect.js"></script>
Usage
The primary export of type-detect is function that can serve as a replacement for typeof. The results of this function will be more specific than that of native typeof.
var type = require('type-detect');
array
assert(type([]) === 'Array');
assert(type(new Array()) === 'Array');
regexp
assert(type(/a-z/gi) === 'RegExp');
assert(type(new RegExp('a-z')) === 'RegExp');
function
assert(type(function () {}) === 'function');
arguments
(function () {
assert(type(arguments) === 'Arguments');
})();
date
assert(type(new Date) === 'Date');
number
assert(type(1) === 'number');
assert(type(1.234) === 'number');
assert(type(-1) === 'number');
assert(type(-1.234) === 'number');
assert(type(Infinity) === 'number');
assert(type(NaN) === 'number');
assert(type(new Number(1)) === 'Number'); // note - the object version has a capital N
string
assert(type('hello world') === 'string');
assert(type(new String('hello')) === 'String'); // note - the object version has a capital S
null
assert(type(null) === 'null');
assert(type(undefined) !== 'null');
undefined
assert(type(undefined) === 'undefined');
assert(type(null) !== 'undefined');
object
var Noop = function () {};
assert(type({}) === 'Object');
assert(type(Noop) !== 'Object');
assert(type(new Noop) === 'Object');
assert(type(new Object) === 'Object');
ECMA6 Types
All new ECMAScript 2015 objects are also supported, such as Promises and Symbols:
assert(type(new Map() === 'Map');
assert(type(new WeakMap()) === 'WeakMap');
assert(type(new Set()) === 'Set');
assert(type(new WeakSet()) === 'WeakSet');
assert(type(Symbol()) === 'symbol');
assert(type(new Promise(callback) === 'Promise');
assert(type(new Int8Array()) === 'Int8Array');
assert(type(new Uint8Array()) === 'Uint8Array');
assert(type(new UInt8ClampedArray()) === 'Uint8ClampedArray');
assert(type(new Int16Array()) === 'Int16Array');
assert(type(new Uint16Array()) === 'Uint16Array');
assert(type(new Int32Array()) === 'Int32Array');
assert(type(new UInt32Array()) === 'Uint32Array');
assert(type(new Float32Array()) === 'Float32Array');
assert(type(new Float64Array()) === 'Float64Array');
assert(type(new ArrayBuffer()) === 'ArrayBuffer');
assert(type(new DataView(arrayBuffer)) === 'DataView');
Also, if you use Symbol.toStringTag to change an Objects return value of the toString() Method, type() will return this value, e.g:
var myObject = {};
myObject[Symbol.toStringTag] = 'myCustomType';
assert(type(myObject) === 'myCustomType');
Dependencies
Development Dependencies
| ID | Version |
|---|---|
| @commitlint/cli | ^4.2.2 |
| benchmark | ^2.1.0 |
| buble | ^0.16.0 |
| codecov | ^3.0.0 |
| commitlint-config-angular | ^4.2.1 |
| cross-env | ^5.1.1 |
| eslint | ^4.10.0 |
| eslint-config-strict | ^14.0.0 |
| eslint-plugin-filenames | ^1.2.0 |
| husky | ^0.14.3 |
| karma | ^1.7.1 |
| karma-chrome-launcher | ^2.2.0 |
| karma-coverage | ^1.1.1 |
| karma-detect-browsers | ^2.2.5 |
| karma-edge-launcher | ^0.4.2 |
| karma-firefox-launcher | ^1.0.1 |
| karma-ie-launcher | ^1.0.0 |
| karma-mocha | ^1.3.0 |
| karma-opera-launcher | ^1.0.0 |
| karma-safari-launcher | ^1.0.0 |
| karma-safaritechpreview-launcher | 0.0.6 |
| karma-sauce-launcher | ^1.2.0 |
| mocha | ^4.0.1 |
| nyc | ^11.3.0 |
| rollup | ^0.50.0 |
| rollup-plugin-buble | ^0.16.0 |
| rollup-plugin-commonjs | ^8.2.6 |
| rollup-plugin-istanbul | ^1.1.0 |
| rollup-plugin-node-resolve | ^3.0.0 |
| semantic-release | ^8.2.0 |
| simple-assert | ^1.0.0 |