code: function type(value, extendNumber) {
      if (value === undefined) return 'undefined';
      if (value === null) return 'null';
      if (value.toString() === 'NaN') return 'nan';
      if (typeof value === 'number' && extendNumber) {
          if (value === Infinity) return 'infinity';
          if (value % 1 === 0) return 'integer';
          return 'float';
      }
      // using split and substrings is faster than regular expressions
      var oclass = Object.prototype.toString.call(value).split(' ')[1];
      return oclass.substr(0, oclass.length - 1).toLowerCase();
  }
docs: Determine the type of an object. This method is similar to 'typeof' but with
  the extended type differentiation proposed for EcmaScript 6 (Harmony). This
  method relies on the value returned by Object.prototype.toString, converted
  to a lower case string value matching the behavior of 'typeof', with some
  special cases for distinguishing different numeric and object types.
  The special unique values undefined, null, NaN, and Infinity return their
  value in a manner that follows as closely as possible the behavior of typeof
  and generally following a modified version of the EcmaScript 5.1 spec:
  ES 5.1:
  > 15.2.4.2 Object.prototype.toString ( )
  When the toString method is called, the following steps are taken:
  1. If the this value is undefined, return "[object Undefined]".
  2. If the this value is null, return "[object Null]"
  
  @param value value/object to get the type of.
  @param {Boolean} extendNumber Whether to distinguish Integer and Float.
  
  @returns {String} of one of one of the following types
  - undefined
  - null
  - infinity
  - nan
  - date
  - regexp
  - array
  - integer
  - float
  - string
  - function
  - boolean
  - object
  
  @example
  // returns 'object'
  ntype.type({ foo: 'bar' })