blob: 95b7050cc68b55a392475ffd9b39e5c8da43ce7c [file] [log] [blame]
Tim van der Lippefdbd42e2020-04-07 15:14:36 +01001'use strict';
2
3var strValue = String.prototype.valueOf;
4var tryStringObject = function tryStringObject(value) {
5 try {
6 strValue.call(value);
7 return true;
8 } catch (e) {
9 return false;
10 }
11};
12var toStr = Object.prototype.toString;
13var strClass = '[object String]';
14var hasToStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';
15
16module.exports = function isString(value) {
17 if (typeof value === 'string') {
18 return true;
19 }
20 if (typeof value !== 'object') {
21 return false;
22 }
23 return hasToStringTag ? tryStringObject(value) : toStr.call(value) === strClass;
24};