legible type checking "micro library"
$ npm install is-a
var is = require('is-a');
var StringOrRegExp = [is.STRING, is.REGEXP];
var thing1 = /mischief/;
console.log(is(thing1).a.String); //false
console.log(is(thing1).not.a.Number); //true
console.log(is(thing1).an.Array); //false
console.log(is(thing1).a.RegExp); //true
console.log(is(thing1).a(StringOrRegExp)); //true
console.log(is(thing1).a.Primitive); //false
console.log(is(thing1).a.CoreObject); //true
console.log(is(thing1).not.a.JsonBasicType); //true
console.log(is(thing1).a.BuiltinType); //true
var thing2 = "mayhem";
console.log(is(thing2).a.String); //true
console.log(is(thing2).not.a.Number); //true
console.log(is(thing2).an.Array); //false
console.log(is(thing2).a.RegExp); //false
console.log(is(thing2).a(StringOrRegExp)); //true
console.log(is(thing2).a.Primitive); //true
console.log(is(thing2).a.CoreObject); //true
console.log(is(thing2).not.a.JsonBasicType); //false
console.log(is(thing2).a.BuiltinType); //true
var myType = is.ARRAY;
console.log(myType.is.a.String); //false
console.log(myType.is.not.a.Number); //true
console.log(myType.is.an.Array); //true
console.log(myType.is.a.RegExp); //false
console.log(myType.is.a(StringOrRegExp)); //false
console.log(myType.is.a.Primitive); //false
console.log(myType.is.a.CoreObject); //true
console.log(myType.is.not.a.JsonBasicType); //false
console.log(myType.is.a.BuiltinType); //truethis is the complete list of tests. .a, .an, and .is are optional, is(x).not... is the same as !is(x)...
is(x).Argumentsis(x).an.Arrayis(x).a.Booleanis(x).a.Dateis(x).a.Functionis(x).a.Mathis(x).Nullis(x).a.Numberis(x).an.Objectis(x).a.RegExpis(x).a.Stringis(x).Undefined
is(x).not.Argumentsis(x).not.an.Arrayis(x).not.a.Booleanis(x).not.a.Dateis(x).not.a.Functionis(x).not.a.Mathis(x).not.Nullis(x).not.a.Numberis(x).not.an.Objectis(x).not.a.RegExpis(x).not.a.Stringis(x).not.Undefined
general types are
BuiltinType: one of (Arguments, Array, Boolean, Date, Function, Math, Null, Number, Object, RegExp, String, Undefined)JsonBasicType: one of (Array, Boolean, Null, Number, Object, String, Undefined)CoreObject: one of (Array, Boolean, Date, Function, Math, Number, RegExp, String)Primitive: one of (Boolean, Null, Number, String, Undefined)
general types can be tested for just like simple types
is(x).a.BuiltinTypeis(x).a.JsonBasicTypeis(x).a.CoreObjectis(x).a.Primitiveis(x).a([is.STRING, is.ARRAY])
.not still works
is(x).not.a.BuiltinTypeis(x).not.a.JsonBasicTypeis(x).not.a.CoreObjectis(x).not.a.Primitiveis(x).not.a([is.STRING, is.ARRAY])
builtin types can be tested too
is.ARRAY.a.JsonBasicTypeis.REGEXP.a([is.STRING, is.ARRAY])
var is = require('is-a');
var thing1 = /mischief/;
console.log(is(thing1).toString()); // "RegExp"
console.log(is(thing1).toType()); // "[object RegExp]"