我正在使用带有[“iife-wrap”]插件的ES6 + babel。
我正在尝试重新制作我之前创建的插件(表单验证)。我试图检查数据是否是一个对象。
对于es5,这只是:typeof blah === 'object'
或string, function, and etc.
但是,如果我把它放在es6上。它会产生 Uncaught TypeError的错误:_typeof不是函数
这是我的代码示例。
let es6function = () => {
return 'asd';
}
console.log(typeof es6function)
class Person {
}
let tryThis = new Person()
console.log(tryThis instanceof Person)
ES5:后编译
;
(function () {
'use strict';
function _classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
}
var _typeof = typeof Symbol === "function" && _typeof(Symbol.iterator) === "symbol" ? function (obj) {
return typeof obj === 'undefined' ? 'undefined' : _typeof(obj);
} : function (obj) {
return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj === 'undefined' ? 'undefined' : _typeof(obj);
};
var es6function = function es6function() {
return 'asd';
};
console.log(typeof es6function === 'undefined' ? 'undefined' : _typeof(es6function));
var Person = function Person() {
_classCallCheck(this, Person);
};
var tryThis = new Person();
console.log(tryThis instanceof Person);
})();
任何帮助将不胜感激。感谢。
答案 0 :(得分:3)
看起来你不小心在你的代码中经过两次Babel。
ES6代码
XtX_lamb
确实会被转换为
console.log(typeof es6function)
确实成了
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; };
console.log(typeof es6function === 'undefined' ? 'undefined' : _typeof(es6function));
当你再次传播它时。除了var _typeof2 = 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" && _typeof2(Symbol.iterator) === "symbol" ? function (obj) {
return typeof obj === "undefined" ? "undefined" : _typeof2(obj);
} : function (obj) {
return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj === "undefined" ? "undefined" : _typeof2(obj);
};
console.log(typeof es6function === 'undefined' ? 'undefined' : _typeof(es6function));
/ _typeof
重复之外,这看起来很像你的翻译结果。检查您的构建配置和babel插件。尝试一个接一个地禁用,以查看问题何时消失,并报告负责组件的错误。
答案 1 :(得分:-3)
你可以像这样添加括号吗?
if( typeof(Symbol) === 'function') ) { ... }