diff --git a/packages/core-js-pure/override/internals/set-to-string-tag.js b/packages/core-js-pure/override/internals/set-to-string-tag.js index 22438caea782..7043d714372e 100644 --- a/packages/core-js-pure/override/internals/set-to-string-tag.js +++ b/packages/core-js-pure/override/internals/set-to-string-tag.js @@ -1,3 +1,4 @@ +var TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support'); var defineProperty = require('../internals/object-define-property').f; var createNonEnumerableProperty = require('../internals/create-non-enumerable-property'); var has = require('../internals/has'); @@ -5,7 +6,6 @@ var toString = require('../internals/object-to-string'); var wellKnownSymbol = require('../internals/well-known-symbol'); var TO_STRING_TAG = wellKnownSymbol('toStringTag'); -var METHOD_REQUIRED = toString !== ({}).toString; module.exports = function (it, TAG, STATIC, SET_METHOD) { if (it) { @@ -13,7 +13,7 @@ module.exports = function (it, TAG, STATIC, SET_METHOD) { if (!has(target, TO_STRING_TAG)) { defineProperty(target, TO_STRING_TAG, { configurable: true, value: TAG }); } - if (SET_METHOD && METHOD_REQUIRED) { + if (SET_METHOD && !TO_STRING_TAG_SUPPORT) { createNonEnumerableProperty(target, 'toString', toString); } } diff --git a/packages/core-js/internals/classof.js b/packages/core-js/internals/classof.js index 5dedaceb6d11..0fd0844b4215 100644 --- a/packages/core-js/internals/classof.js +++ b/packages/core-js/internals/classof.js @@ -1,3 +1,4 @@ +var TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support'); var classofRaw = require('../internals/classof-raw'); var wellKnownSymbol = require('../internals/well-known-symbol'); @@ -13,7 +14,7 @@ var tryGet = function (it, key) { }; // getting tag from ES6+ `Object.prototype.toString` -module.exports = function (it) { +module.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) { var O, tag, result; return it === undefined ? 'Undefined' : it === null ? 'Null' // @@toStringTag case diff --git a/packages/core-js/internals/object-to-string.js b/packages/core-js/internals/object-to-string.js index a08766c77192..68fbea7c752b 100644 --- a/packages/core-js/internals/object-to-string.js +++ b/packages/core-js/internals/object-to-string.js @@ -1,14 +1,9 @@ 'use strict'; +var TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support'); var classof = require('../internals/classof'); -var wellKnownSymbol = require('../internals/well-known-symbol'); - -var TO_STRING_TAG = wellKnownSymbol('toStringTag'); -var test = {}; - -test[TO_STRING_TAG] = 'z'; // `Object.prototype.toString` method implementation // https://tc39.github.io/ecma262/#sec-object.prototype.tostring -module.exports = String(test) !== '[object z]' ? function toString() { +module.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() { return '[object ' + classof(this) + ']'; -} : test.toString; +}; diff --git a/packages/core-js/internals/to-string-tag-support.js b/packages/core-js/internals/to-string-tag-support.js new file mode 100644 index 000000000000..9e3ebfbec980 --- /dev/null +++ b/packages/core-js/internals/to-string-tag-support.js @@ -0,0 +1,8 @@ +var wellKnownSymbol = require('../internals/well-known-symbol'); + +var TO_STRING_TAG = wellKnownSymbol('toStringTag'); +var test = {}; + +test[TO_STRING_TAG] = 'z'; + +module.exports = String(test) === '[object z]'; diff --git a/packages/core-js/modules/es.object.to-string.js b/packages/core-js/modules/es.object.to-string.js index 0799517932df..705de4cb06f8 100644 --- a/packages/core-js/modules/es.object.to-string.js +++ b/packages/core-js/modules/es.object.to-string.js @@ -1,10 +1,9 @@ +var TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support'); var redefine = require('../internals/redefine'); var toString = require('../internals/object-to-string'); -var ObjectPrototype = Object.prototype; - // `Object.prototype.toString` method // https://tc39.github.io/ecma262/#sec-object.prototype.tostring -if (toString !== ObjectPrototype.toString) { - redefine(ObjectPrototype, 'toString', toString, { unsafe: true }); +if (!TO_STRING_TAG_SUPPORT) { + redefine(Object.prototype, 'toString', toString, { unsafe: true }); } diff --git a/packages/core-js/modules/es.string.match-all.js b/packages/core-js/modules/es.string.match-all.js index f968f4a17a73..3fc36eb81ac0 100644 --- a/packages/core-js/modules/es.string.match-all.js +++ b/packages/core-js/modules/es.string.match-all.js @@ -5,7 +5,7 @@ var requireObjectCoercible = require('../internals/require-object-coercible'); var toLength = require('../internals/to-length'); var aFunction = require('../internals/a-function'); var anObject = require('../internals/an-object'); -var classof = require('../internals/classof'); +var classof = require('../internals/classof-raw'); var isRegExp = require('../internals/is-regexp'); var getRegExpFlags = require('../internals/regexp-flags'); var createNonEnumerableProperty = require('../internals/create-non-enumerable-property');