isTypedArray.js 2.5 KB

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