--- /dev/null
+'use strict';
+
+var strValue = String.prototype.valueOf;
+var tryStringObject = function tryStringObject(value) {
+ try {
+ strValue.call(value);
+ return true;
+ } catch (e) {
+ return false;
+ }
+};
+var toStr = Object.prototype.toString;
+var strClass = '[object String]';
+var hasToStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';
+
+module.exports = function isString(value) {
+ if (typeof value === 'string') {
+ return true;
+ }
+ if (typeof value !== 'object') {
+ return false;
+ }
+ return hasToStringTag ? tryStringObject(value) : toStr.call(value) === strClass;
+};