diff --git a/packages/core-js/internals/symbol-constructor-detection.js b/packages/core-js/internals/symbol-constructor-detection.js index 8c85dd4b97e4..1a9cf0f8e4b3 100644 --- a/packages/core-js/internals/symbol-constructor-detection.js +++ b/packages/core-js/internals/symbol-constructor-detection.js @@ -1,13 +1,18 @@ /* eslint-disable es/no-symbol -- required for testing */ var V8_VERSION = require('../internals/engine-v8-version'); var fails = require('../internals/fails'); +var global = require('../internals/global'); + +var $String = global.String; // eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing module.exports = !!Object.getOwnPropertySymbols && !fails(function () { var symbol = Symbol(); // Chrome 38 Symbol has incorrect toString conversion // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances - return !String(symbol) || !(Object(symbol) instanceof Symbol) || + // nb: Do not call `String` directly to avoid this being optimized out to `symbol+''` which will, + // of course, fail. + return !$String(symbol) || !(Object(symbol) instanceof Symbol) || // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances !Symbol.sham && V8_VERSION && V8_VERSION < 41; });