whole_func_string: function classOf (value) {
          var retVal,
              valueType,
              toString;
          if (typeof value === _undefined) {
              retVal = _Undefined;
          }
          else if (value === null) {
              retVal = _Null;
          }
          else {
              toString = value.toString.name === 'toString' ? Object.prototype.toString : value.toString;
              valueType = toString.call(value);
              retVal = valueType.substring(8, valueType.length - 1);
              if (retVal === _Number && isNaN(value)) {
                  retVal = 'NaN';
              }
          }
          return retVal;
      }
func_code_string: function classOf (value) {
          var retVal,
              valueType,
              toString;
          if (typeof value === _undefined) {
              retVal = _Undefined;
          }
          else if (value === null) {
              retVal = _Null;
          }
          else {
              toString = value.toString.name === 'toString' ? Object.prototype.toString : value.toString;
              valueType = toString.call(value);
              retVal = valueType.substring(8, valueType.length - 1);
              if (retVal === _Number && isNaN(value)) {
                  retVal = 'NaN';
              }
          }
          return retVal;
      }
func_documentation_string: Returns the class name of an object from it's class string.
  @note Returns 'NaN' if value type is 'Number' and value isNaN evaluates to true as of version 0.4.85.
  @note If your type (constructor/class) overrides it's `toString` method use a named `toString` method to get the accurate constructor name out of `classOf`;  E.g., If you do override `toString` on your class(es) and don't set them to named functions then `sjl.classOf*` will use Object.prototype.toString to pull your classes type out.
  @function module:sjl.classOf
  @param value {*}
  @returns {string} - A string representation of the type of the value; E.g., 'Number' for `0`