blob: 5f77f03d2d23dacf14a99eed6a356ae4bb8f1f6e [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]';
Tim van der Lippe2c891972021-07-29 16:22:50 +010014var hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag;
Tim van der Lippefdbd42e2020-04-07 15:14:36 +010015
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};