1 var isLength = require('./isLength'),
2 isObjectLike = require('./isObjectLike');
4 /** `Object#toString` result references. */
5 var argsTag = '[object Arguments]',
6 arrayTag = '[object Array]',
7 boolTag = '[object Boolean]',
8 dateTag = '[object Date]',
9 errorTag = '[object Error]',
10 funcTag = '[object Function]',
11 mapTag = '[object Map]',
12 numberTag = '[object Number]',
13 objectTag = '[object Object]',
14 regexpTag = '[object RegExp]',
15 setTag = '[object Set]',
16 stringTag = '[object String]',
17 weakMapTag = '[object WeakMap]';
19 var arrayBufferTag = '[object ArrayBuffer]',
20 float32Tag = '[object Float32Array]',
21 float64Tag = '[object Float64Array]',
22 int8Tag = '[object Int8Array]',
23 int16Tag = '[object Int16Array]',
24 int32Tag = '[object Int32Array]',
25 uint8Tag = '[object Uint8Array]',
26 uint8ClampedTag = '[object Uint8ClampedArray]',
27 uint16Tag = '[object Uint16Array]',
28 uint32Tag = '[object Uint32Array]';
30 /** Used to identify `toStringTag` values of typed arrays. */
31 var typedArrayTags = {};
32 typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =
33 typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =
34 typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =
35 typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =
36 typedArrayTags[uint32Tag] = true;
37 typedArrayTags[argsTag] = typedArrayTags[arrayTag] =
38 typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =
39 typedArrayTags[dateTag] = typedArrayTags[errorTag] =
40 typedArrayTags[funcTag] = typedArrayTags[mapTag] =
41 typedArrayTags[numberTag] = typedArrayTags[objectTag] =
42 typedArrayTags[regexpTag] = typedArrayTags[setTag] =
43 typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;
45 /** Used for built-in method references. */
46 var objectProto = Object.prototype;
49 * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)
52 var objectToString = objectProto.toString;
55 * Checks if `value` is classified as a typed array.
60 * @param {*} value The value to check.
61 * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
64 * _.isTypedArray(new Uint8Array);
70 function isTypedArray(value) {
71 return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[objectToString.call(value)];
74 module.exports = isTypedArray;