instanceof和constructor属性之间的区别

时间:2013-08-11 14:19:33

标签: javascript

a instanceof b是否与a.constructor === b完全相同? 如果没有,请告诉我这些之间的区别。

2 个答案:

答案 0 :(得分:15)

没有

instanceof还会检查“继承的”构造函数。

有关详细信息,请参阅规范。 (herehere

答案 1 :(得分:2)

SLaks' answer是正确的,但我想补充一点,.constructor适用于原始类型,而instanceof却不适用:

"Hello World".constructor == String;    //true
"Hello World" instanceof String;    //false

第二个条件为false的原因是因为"Hello World"是原始字符串,而不是对象,因此它不是任何实例。另一方面,在第一种情况下,将方法(例如constructor)应用于原始类型时,它将转换为对象。因此,首先将"Hello World"转换为new String("Hello World"),然后返回new String("Hello World").constructor的{​​{1}}。这对于数字和布尔值的工作方式相同。

您还可以在基本类型上使用String,但不适用于对象:

typeof

因此,如果您要处理字符串,数字或布尔值,而不必担心继承,则应使用:

  • typeof "Hello World"; //"string" typeof new String("Hello World"); //"object" ,如果您要检查变量是字符串,数字还是布尔值,则不管它是原始类型还是对象都没关系。

    还有其他类似的方法,例如.constructortypeof foo.valueOf(),但是(foo instanceof String || typeof foo == "string")是最短的方法。但是,如果出于某些原因您拥有继​​承.constructorStringNumber的类,并且还想检查继承的类型,则较长的方法会很有用。

  • Boolean,如果您要检查变量是instanceofString还是Number对象而不是原始类型。
  • Boolean,如果要检查变量的类型是否是原始类型而不是对象。