| var Symbol = require('./_Symbol'); |
| |
| /** Used for built-in method references. */ |
| var objectProto = Object.prototype; |
| |
| /** Used to check objects for own properties. */ |
| var hasOwnProperty = objectProto.hasOwnProperty; |
| |
| /** |
| * Used to resolve the |
| * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) |
| * of values. |
| */ |
| var nativeObjectToString = objectProto.toString; |
| |
| /** Built-in value references. */ |
| var symToStringTag = Symbol ? Symbol.toStringTag : undefined; |
| |
| /** |
| * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. |
| * |
| * @private |
| * @param {*} value The value to query. |
| * @returns {string} Returns the raw `toStringTag`. |
| */ |
| function getRawTag(value) { |
| var isOwn = hasOwnProperty.call(value, symToStringTag), |
| tag = value[symToStringTag]; |
| |
| try { |
| value[symToStringTag] = undefined; |
| var unmasked = true; |
| } catch (e) {} |
| |
| var result = nativeObjectToString.call(value); |
| if (unmasked) { |
| if (isOwn) { |
| value[symToStringTag] = tag; |
| } else { |
| delete value[symToStringTag]; |
| } |
| } |
| return result; |
| } |
| |
| module.exports = getRawTag; |