function nativeClass( v ) {
	var isOwn;
	var tag;
	var out;

	if ( v === null || v === void 0 ) {
		return toStr.call( v );
	}
	tag = v[ toStringTag ];
	isOwn = hasOwnProp( v, toStringTag );

	// Attempt to override the `toStringTag` property. For built-ins having a `Symbol.toStringTag` property (e.g., `JSON`, `Math`, etc), the `Symbol.toStringTag` property is read-only (e.g., , so we need to wrap in a `try/catch`.
	try {
		v[ toStringTag ] = void 0;
	} catch ( err ) { // eslint-disable-line no-unused-vars
		return toStr.call( v );
	}
	out = toStr.call( v );

	if ( isOwn ) {
		v[ toStringTag ] = tag;
	} else {
		delete v[ toStringTag ];
	}
	return out;
}
Returns a string value indicating a specification defined classification of an object in environments supporting `Symbol.toStringTag`.

@param {*} v - input value
@returns {string} string value indicating a specification defined classification of the input value

@example
var str = nativeClass( 'a' );
// returns '[object String]'

@example
var str = nativeClass( 5 );
// returns '[object Number]'

@example
function Beep() {
    return this;
}
var str = nativeClass( new Beep() );
// returns '[object Object]'