| 'use strict'; |
| |
| var callBound = require('call-bind/callBound'); |
| var $boolToStr = callBound('Boolean.prototype.toString'); |
| var $toString = callBound('Object.prototype.toString'); |
| |
| var tryBooleanObject = function booleanBrandCheck(value) { |
| try { |
| $boolToStr(value); |
| return true; |
| } catch (e) { |
| return false; |
| } |
| }; |
| var boolClass = '[object Boolean]'; |
| var hasToStringTag = require('has-tostringtag/shams')(); |
| |
| module.exports = function isBoolean(value) { |
| if (typeof value === 'boolean') { |
| return true; |
| } |
| if (value === null || typeof value !== 'object') { |
| return false; |
| } |
| return hasToStringTag && Symbol.toStringTag in value ? tryBooleanObject(value) : $toString(value) === boolClass; |
| }; |