npm install type-nametype-name
================================
Just a reasonable typeof
[![Build Status][travis-image]][travis-url]
[![NPM version][npm-image]][npm-url]
[![Dependency Status][depstat-image]][depstat-url]
[![License][license-image]][license-url]
[![Sauce Test Status][saucelabs-image]][saucelabs-url]
DESCRIPTION
---------------------------------------
typeName function returns reasonable type name for input value.
| description | input | result |
|:---------------|:--------|:------------|
| null literal | null | 'null' |
| undefined value | undefined | 'undefined' |
| string literal | 'foo' | 'string' |
| number literal | 5 | 'number' |
| boolean literal | false | 'boolean' |
| regexp literal (Android 4.1+) | /^not/ | 'RegExp' |
| array literal | ['foo', 4] | 'Array' |
| object literal | {name: 'bar'} | 'Object' (be careful!) |
| function expression | function () {} | 'function' |
| String object | new String('foo') | 'String' |
| Number object | new Number('3') | 'Number' |
| Boolean object |new Boolean('1') | 'Boolean' |
| Date object | new Date() | 'Date' |
| RegExp object (Android 4.1+) | new RegExp('^not', 'g') | 'RegExp' |
| Array object | new Array() | 'Array' |
| Object object | new Object() | 'Object' |
| Function object | new Function('x', 'y', 'return x + y') | 'function' (be careful!) |
| Error object | new Error('error!') | 'Error' |
| TypeError object | new TypeError('type error!') | 'TypeError' |
| NaN | NaN | 'number' |
| Infinity | Infinity | 'number' |
| Math | Math | 'Math' |
| JSON (IE8+) | JSON | 'JSON' |
| arguments object (IE9+) | (function(){ return arguments; })() | 'Arguments' |
| User-defined constructor | new Person('alice', 5) | 'Person' |
| Anonymous constructor | new AnonPerson('bob', 4) | '' |
| Named class | new(class Foo { constructor() {} }) | 'Foo' |
| Anonymous class | new(class { constructor() {} }) | '' |
| Symbol | Symbol("FOO") | 'symbol' |
| Promise | Promise.resolve(1) | 'Promise' |
EXAMPLE
---------------------------------------
``javascript
var typeName = require('type-name');
var assert = require('assert');
assert(typeName(null) === 'null');
assert(typeName(undefined) === 'undefined');
assert(typeName('foo') === 'string');
assert(typeName(5) === 'number');
assert(typeName(false) === 'boolean');
assert(typeName(/^not/) === 'RegExp');
assert(typeName(['foo', 4]) === 'Array');
assert(typeName({name: 'bar'}) === 'Object');
assert(typeName(function () {}) === 'function');
assert(typeName(new String('foo')) === 'String');
assert(typeName(new Number('3')) === 'Number');
assert(typeName(new Boolean('1')) === 'Boolean');
assert(typeName(new Date()) === 'Date');
assert(typeName(new RegExp('^not', 'g')) === 'RegExp');
assert(typeName(new Array()) === 'Array');
assert(typeName(new Object()) === 'Object');
assert(typeName(new Function('x', 'y', 'return x + y')) === 'function');
assert(typeName(new Error('error!')) === 'Error');
assert(typeName(new TypeError('type error!')) === 'TypeError');
assert(typeName(NaN) === 'number');
assert(typeName(Infinity) === 'number');
assert(typeName(Math) === 'Math');
assert(typeName(JSON) === 'JSON'); // IE8+
assert(typeName((function(){ return arguments; })()) === 'Arguments'); // IE9+
assert(typeName(Symbol("FOO")) === 'symbol');
assert(typeName(Promise.resolve(1)) === 'Promise');
function Person(name, age) {
this.name = name;
this.age = age;
}
var AnonPerson = function(name, age) {
this.name = name;
this.age = age;
};
assert(typeName(new Person('alice', 5)) === 'Person');
assert(typeName(new AnonPerson('bob', 4)) === '');
assert(typeName(new(class Foo { constructor() {} })) === 'Foo');
assert(typeName(new(class { constructor() {} })) === '');
`
INSTALL
---------------------------------------
Install
$ npm install --save type-name
Use
`javascript`
var typeName = require('type-name');
console.log(typeName(anyVar));
#### use type-name npm module on browser
typeName function is exported
Install
$ bower install --save type-name
Load (typeName function is exported)
Use
`javascript``
console.log(typeName(anyVar));
AUTHOR
---------------------------------------
* Takuto Wada
CONTRIBUTORS
---------------------------------------
* azu
* Yosuke Furukawa
* Athan
* Andrew Moss
LICENSE
---------------------------------------
Licensed under the MIT license.
[npm-url]: https://npmjs.org/package/type-name
[npm-image]: https://badge.fury.io/js/type-name.svg
[travis-url]: https://travis-ci.org/twada/type-name
[travis-image]: https://secure.travis-ci.org/twada/type-name.svg?branch=master
[depstat-url]: https://gemnasium.com/twada/type-name
[depstat-image]: https://gemnasium.com/twada/type-name.svg
[license-url]: https://github.com/twada/type-name/blob/master/LICENSE
[license-image]: https://img.shields.io/badge/license-MIT-brightgreen.svg
[saucelabs-url]: https://saucelabs.com/u/type-name
[saucelabs-image]: https://saucelabs.com/browser-matrix/type-name.svg