javascript – 获取ES6中值的typeof

我正在使用带有[“iife-wrap”]插件的ES6 babel.

我正在尝试重新制作我之前创建的插件(表单验证).我试图检查数据是否是一个对象.

对于es5,这只是:typeof blah ===’object’或字符串,函数等.

但是,如果我把它放在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);
})();

任何帮助,将不胜感激.谢谢.

解决方法

看起来你不小心在你的代码中经过了两次Babel.

ES6代码

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 / _typeof2重复之外,这看起来很像你的转换结果.检查您的构建配置和babel插件.尝试一个一个地禁用,以查看问题何时消失,并报告负责组件的错误.

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...