ES6/JS如何判断一个变量是空对象还是函数?

案例:
有这么一个变量a初始值为{}
满足一定条件后,a将为一个函数: console.log如下

a: f (xxx) {
    xxx
}

请问我要如何判断上面两种区别呢?谢谢

阅读 7.4k
5 个回答
Object.prototype.toString.call([])
"[object Array]"

Object.prototype.toString.call(function(){})
"[object Function]"

这跟es6没有关系。console.log只是浏览器(宿主环境)自己实现的东西,并没有列入ECMAScript标准。

至于如何判断, 就普通的判断原始类型不就好了吗:
Object.prototype.toString.call(obj) === '[object Object]';

事例讲解

最简单的:
typeof {} => object
typeof function(){} => function

var i = {}
typeof i
//"object"
i = function(){}
typeof i
//"function"
//判断是否为对象
function isObject(obj) {
    return Object.prototype.toString.call(obj) === '[object Object]';
}

//判断是否为funciton
function isArray(obj) {
    return Object.prototype.toString.call(obj) === '[object Function]';
}

这里有我平时收集的一些关于类型判断的方法 : 类型判断

推荐问题