sjl.js
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;
    }
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;
    }
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 ; }
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`
Returns the class name of an object from it s class string .