diff --git a/packages/babel-helpers/src/helpers.js b/packages/babel-helpers/src/helpers.js index d57afc018833..000360432f2b 100644 --- a/packages/babel-helpers/src/helpers.js +++ b/packages/babel-helpers/src/helpers.js @@ -8,7 +8,11 @@ export default helpers; helpers.typeof = template(` (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") ? function (obj) { return typeof obj; } - : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; + : function (obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype + ? "symbol" + : typeof obj; + }; `); helpers.jsx = template(` diff --git a/packages/babel-plugin-transform-es2015-typeof-symbol/test/fixtures/symbols/shadow/expected.js b/packages/babel-plugin-transform-es2015-typeof-symbol/test/fixtures/symbols/shadow/expected.js index 0e6479c44558..2980b2f49cf0 100644 --- a/packages/babel-plugin-transform-es2015-typeof-symbol/test/fixtures/symbols/shadow/expected.js +++ b/packages/babel-plugin-transform-es2015-typeof-symbol/test/fixtures/symbols/shadow/expected.js @@ -1,4 +1,4 @@ -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; var _Symbol = foo(); typeof s === "undefined" ? "undefined" : _typeof(s); diff --git a/packages/babel-plugin-transform-es2015-typeof-symbol/test/fixtures/symbols/typeof/exec.js b/packages/babel-plugin-transform-es2015-typeof-symbol/test/fixtures/symbols/typeof/exec.js index 0c53760815a1..d89051afe7db 100644 --- a/packages/babel-plugin-transform-es2015-typeof-symbol/test/fixtures/symbols/typeof/exec.js +++ b/packages/babel-plugin-transform-es2015-typeof-symbol/test/fixtures/symbols/typeof/exec.js @@ -1,3 +1,4 @@ var s = Symbol("s"); assert.equal(typeof s, "symbol"); assert.ok(typeof s === "symbol"); +assert.ok(typeof Symbol.prototype === 'object', "`typeof Symbol.prototype` should be 'object'");