index.js 711 B

12345678910111213141516171819202122232425262728
  1. 'use strict';
  2. var callBound = require('call-bound');
  3. var $boolToStr = callBound('Boolean.prototype.toString');
  4. var $toString = callBound('Object.prototype.toString');
  5. /** @type {import('.')} */
  6. var tryBooleanObject = function booleanBrandCheck(value) {
  7. try {
  8. $boolToStr(value);
  9. return true;
  10. } catch (e) {
  11. return false;
  12. }
  13. };
  14. var boolClass = '[object Boolean]';
  15. var hasToStringTag = require('has-tostringtag/shams')();
  16. /** @type {import('.')} */
  17. module.exports = function isBoolean(value) {
  18. if (typeof value === 'boolean') {
  19. return true;
  20. }
  21. if (value === null || typeof value !== 'object') {
  22. return false;
  23. }
  24. return hasToStringTag ? tryBooleanObject(value) : $toString(value) === boolClass;
  25. };