为什么在JavaScript类中有一个instanceof Function,但是typeof类不是一个对象?

ktr*_*yak 1 javascript types

当我们说"实例"时,我们假设我们正在处理一个对象.为什么JavaScript的运算符在我们要求时instanceof返回,但是?为什么不呢?true(class A { }) instanceof Functiontypeof (class A { }) == "function"object

Fel*_*ing 5

instanceof当我们询问时,为什么JavaScript的运算符返回true(class A { }) instanceof Function

classes只是构造函数的语法糖.即评估class A {}产生一个功能.

以下两个示例(或多或少)等效,即它们产生相同的结果/值:

// class
class A {
  constructor() {
    this.foo = 42;
  }

  bar() {
    console.log(this.foo);
  }
}

// constructor function
function A() {
  this.foo = 42;
}

A.prototype.bar = function() {
  console.log(this.foo);
}
Run Code Online (Sandbox Code Playgroud)

所有非原始值(字符串,数字,布尔值,空值,未定义,符号)都是JavaScript中的对象.函数也是对象,具有使其可调用(和/或可构造)的特殊内部属性.


为什么不反对?

typeof返回"function"函数值的字符串,因为它是在规范中定义的方式.