super-fool / blog

珍藏经典, 分享思想, 共同进步.加油
3 stars 0 forks source link

为什么`typeof function`返回的是`function`? #49

Open super-fool opened 5 years ago

super-fool commented 5 years ago

JS中,typeof主要是用来查看数据属于原始类型。 Vue中shared/util.js有一个判断是否是原始类型的方法:

function isPrimitive(value) {
  return typeof value === 'string' ||
             typeof value === 'number' ||
             typeof value === 'boolean' ||
             typeof value === 'symbol';
}

有些人将value ===nulltypeof value === undefined也并入该方法中,其实这是不对的,这两种数据类型属于特殊数据类型。在开发中,如果有这两种类型的值,我们都是要进行throw error,而不是去包容。


进入主题: function实际上是object的一个子类型,更深点说,函数是一个可以被调用的对象。(参考:你不知道的JS-中卷)。

函数本质上就是对象,只不过与普通的对象相比,它在内部实现了一个[[call]]方法,用来表示该对象可以被调用

typeof来判断一个对象时,如果发现内部包含了[[call]]方法,就会返回function

super-fool commented 5 years ago

'抠图'