typeof一个函数为什么返回function而不是object?

typeof

学完「JS 数据类型」那块知识之后,我们就知道,函数属于「对象类型」。

而typeof的作用是来检测数据类型的,typeof一个函数理应返回object。

但是,为什么结果是function呢?(如上图)

这是因为,typeof去检测引用类型的时候,会去看这个引用类型内部有没有[[call]]方法,如果有,则返回function;如果没有,则返回object。

我们可以看下这张图:

typeof

请注意最后两行,typeof Object(does not implement [[Call]]) 返回的是”object”;

typeof Object(implements[[Call]]) 返回的是”function”

注:表中的Symbol和BigInt大家可能会感到陌生,因为这两种数据类型是ES6新增的。