code: function getType(obj, opt_use) {
  	if (!obj) {
  		return null;
  	}
  
  	switch (opt_use) {
  		case 'for':
  			return 'array';
  
  		case 'for in':
  			return 'object';
  
  		case 'for of':
  			return 'iterator';
  
  		case 'async for of':
  			return 'asyncIterator';
  
  		default:
  			if (obj === Empty) {
  				return null;
  			}
  
  			if (isMap(obj)) {
  				return 'map';
  			}
  
  			if (isWeakMap(obj)) {
  				return 'weakMap';
  			}
  
  			if (isSet(obj)) {
  				return 'set';
  			}
  
  			if (isWeakSet(obj)) {
  				return 'weakSet';
  			}
  
  			if (isGenerator(obj)) {
  				return 'generator';
  			}
  
  			if (isLikeArray(obj)) {
  				return 'array';
  			}
  
  			if (isIterator(obj)) {
  				return 'iterator';
  			}
  
  			if (isIDBRequest(obj)) {
  				return 'idbRequest';
  			}
  
  			if (isStream(obj)) {
  				return 'stream';
  			}
  	}
  
  	return 'object';
  }
docs: Returns the current type of an object
  
  @param {Object} obj - source object
  @param {?string=} [opt_use] - cycle type for iteration: for, for in, for of, async for of
  @return {?string}