var baseGetTag = require('./_baseGetTag'),

isLength = require('./isLength'),
isObjectLike = require('./isObjectLike');

/** `Object#toString` result references. */ var argsTag = '[object Arguments]',

arrayTag = '[object Array]',
boolTag = '[object Boolean]',
dateTag = '[object Date]',
errorTag = '[object Error]',
funcTag = '[object Function]',
mapTag = '[object Map]',
numberTag = '[object Number]',
objectTag = '[object Object]',
regexpTag = '[object RegExp]',
setTag = '[object Set]',
stringTag = '[object String]',
weakMapTag = '[object WeakMap]';

var arrayBufferTag = '[object ArrayBuffer]',

dataViewTag = '[object DataView]',
float32Tag = '[object Float32Array]',
float64Tag = '[object Float64Array]',
int8Tag = '[object Int8Array]',
int16Tag = '[object Int16Array]',
int32Tag = '[object Int32Array]',
uint8Tag = '[object Uint8Array]',
uint8ClampedTag = '[object Uint8ClampedArray]',
uint16Tag = '[object Uint16Array]',
uint32Tag = '[object Uint32Array]';

/** Used to identify `toStringTag` values of typed arrays. */ var typedArrayTags = {}; typedArrayTags = typedArrayTags = typedArrayTags = typedArrayTags = typedArrayTags = typedArrayTags = typedArrayTags = typedArrayTags = typedArrayTags = true; typedArrayTags = typedArrayTags = typedArrayTags = typedArrayTags = typedArrayTags = typedArrayTags = typedArrayTags = typedArrayTags = typedArrayTags = typedArrayTags = typedArrayTags = typedArrayTags = typedArrayTags = typedArrayTags = typedArrayTags = false;

/**

* The base implementation of `_.isTypedArray` without Node.js optimizations.
*
* @private
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
*/

function baseIsTypedArray(value) {

return isObjectLike(value) &&
  isLength(value.length) && !!typedArrayTags[baseGetTag(value)];

}

module.exports = baseIsTypedArray;