2.0.2 • Published 8 years ago

type-name v2.0.2

Weekly downloads
275,285
License
MIT
Repository
github
Last release
8 years ago

type-name

Just a reasonable typeof

Build Status NPM version Dependency Status License

Sauce Test Status

DESCRIPTION

typeName function returns reasonable type name for input value.

descriptioninputresult
null literalnull'null'
undefined valueundefined'undefined'
string literal'foo''string'
number literal5'number'
boolean literalfalse'boolean'
regexp literal (Android 4.1+)/^not/'RegExp'
array literal['foo', 4]'Array'
object literal{name: 'bar'}'Object' (be careful!)
function expressionfunction () {}'function'
String objectnew String('foo')'String'
Number objectnew Number('3')'Number'
Boolean objectnew Boolean('1')'Boolean'
Date objectnew Date()'Date'
RegExp object (Android 4.1+)new RegExp('^not', 'g')'RegExp'
Array objectnew Array()'Array'
Object objectnew Object()'Object'
Function objectnew Function('x', 'y', 'return x + y')'function' (be careful!)
Error objectnew Error('error!')'Error'
TypeError objectnew TypeError('type error!')'TypeError'
NaNNaN'number'
InfinityInfinity'number'
MathMath'Math'
JSON (IE8+)JSON'JSON'
arguments object (IE9+)(function(){ return arguments; })()'Arguments'
User-defined constructornew Person('alice', 5)'Person'
Anonymous constructornew AnonPerson('bob', 4)''
Named classnew(class Foo { constructor() {} })'Foo'
Anonymous classnew(class { constructor() {} })''
SymbolSymbol("FOO")'symbol'
PromisePromise.resolve(1)'Promise'

EXAMPLE

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

via npm

Install

$ npm install --save type-name

Use

var typeName = require('type-name');
console.log(typeName(anyVar));

use type-name npm module on browser

typeName function is exported

<script type="text/javascript" src="./path/to/node_modules/type-name/build/type-name.js"></script>

via bower

Install

$ bower install --save type-name

Load (typeName function is exported)

<script type="text/javascript" src="./path/to/bower_components/type-name/build/type-name.js"></script>

Use

console.log(typeName(anyVar));

AUTHOR

CONTRIBUTORS

LICENSE

Licensed under the MIT license.