instanceof和constructor属性之间的区别

fro*_*tto 12 javascript

a instanceof b确切等于a.constructor === b
如果没有,请告诉我这些之间的区别.

SLa*_*aks 17

没有.

instanceof 还检查"继承的"构造函数.

有关更多信息,请参阅规范.(这里这里)


Don*_*uck 12

SLaks 的回答是正确的,但我想补充一点,它.constructor适用于原始类型,instanceof但不适用于:

"Hello World".constructor == String;    //true
"Hello World" instanceof String;    //false
Run Code Online (Sandbox Code Playgroud)

第二个条件为假的原因是因为它"Hello World"是一个原始字符串而不是一个对象,所以它不是任何东西的实例。另一方面,在第一种情况下,当将方法(例如 constructor )应用于基本类型时,它会转换为对象。所以首先"Hello World"被转换为new String("Hello World")然后返回new String("Hello World").constructorwhich is String。这对数字和布尔值的工作方式相同。

您也可以typeof在原始类型上使用,但这不适用于对象:

typeof "Hello World";    //"string"
typeof new String("Hello World");    //"object"
Run Code Online (Sandbox Code Playgroud)

因此,如果您正在处理字符串、数字或布尔值并且不需要担心继承问题,则应该使用:

  • .constructor 如果你想检查变量是字符串、数字还是布尔值,它是原始类型还是对象都没有关系。

    还有其他方法可以做到这一点,如typeof foo.valueOf()(foo instanceof String || typeof foo == "string"),但.constructor最短。但是,如果出于某种原因您有继承的类StringNumber或者Boolean您还想检查继承的类型,则更长的方法可能会很有用。

  • instanceof如果要检查变量是否为String,NumberBooleanobject 而不是原始类型。
  • typeof 如果要检查变量的类型是否是原始类型而不是对象。