From 31cb06a6430e8a965ddeea32ceea5e556047b269 Mon Sep 17 00:00:00 2001 From: John-David Dalton Date: Sun, 9 Oct 2016 14:14:40 -0700 Subject: [PATCH] Move `Symbol.toStringTag` workaround to `getRawTag`. --- lodash.js | 35 +++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/lodash.js b/lodash.js index 08fda2eec..91761f0cd 100644 --- a/lodash.js +++ b/lodash.js @@ -3046,7 +3046,7 @@ } /** - * The base implementation of `getTag`. + * The base implementation of `getTag` without fallbacks for buggy environments. * * @private * @param {*} value The value to query. @@ -3057,15 +3057,9 @@ return value === undefined ? undefinedTag : nullTag; } value = Object(value); - if (symToStringTag && symToStringTag in value) { - var symbol = value[symToStringTag]; - value[symToStringTag] = undefined; - } - var result = objectToString.call(value); - if (symbol) { - value[symToStringTag] = symbol; - } - return result; + return (symToStringTag && symToStringTag in value) + ? getRawTag(value) + : objectToString(value); } /** @@ -5949,6 +5943,27 @@ return baseIsNative(value) ? value : 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) { + try { + var symbol = value[symToStringTag]; + value[symToStringTag] = undefined; + } catch (e) { + symbol = undefined; + } + var result = nativeObjectToString.call(value); + if (symbol) { + value[symToStringTag] = symbol; + } + return result; + } + /** * Creates an array of the own enumerable symbol properties of `object`. *