typeof、instanceof和contructor的区别

阅读时长 4 分钟读完

在 JavaScript 中,有三个常用的关键字:typeof、instanceof和constructor。它们通常用于判断变量类型或对象的原型链。虽然它们在某些情况下可以互换使用,但它们之间还是有着一些重要的区别。

typeof

typeof 操作符用于确定变量或表达式的数据类型。它返回一个字符串,该字符串指示其操作数的数据类型。以下是 typeof 操作符可能返回的字符串值:

  • "undefined":如果变量没有被初始化或者未声明。
  • "boolean":如果变量是布尔值。
  • "string":如果变量是字符串。
  • "number":如果变量是数字。
  • "object":如果变量是对象或 null(null 被视为对象的特殊情况)。
  • "function":如果变量是函数。

以下是一个使用 typeof 操作符的例子:

需要注意的是,typeof 返回的结果是一个字符串,因此进行类型比较时要使用字符串比较而不是直接比较类型本身。

instanceof

instanceof 运算符用于检查对象是否属于某个类(或构造函数)的实例。它返回一个布尔值,表示该对象是否属于指定的类。以下是 instanceof 运算符的语法:

其中,object 是要检查的对象,constructor 是要比较的类(或构造函数)。

以下是一个使用 instanceof 运算符的例子:

需要注意的是,instanceof 操作符检查的是原型链中是否出现了指定的类(或构造函数)。因此,如果对象是通过继承创建的,实例化时所用的构造函数与对象原型链中的构造函数可能并不相同。在这种情况下,instanceof 操作符可能会返回 false。

constructor

constructor 属性是 JavaScript 中每个对象都具有的属性,它指向对象的构造函数。如果对象是使用原型继承创建的,则该属性指向父类的构造函数。

以下是一个使用 constructor 属性的例子:

需要注意的是,constructor 属性可以被重写。因此,在使用 constructor 属性时应该谨慎,以避免产生意外的行为。

区别总结

  • typeof 用于确定变量或表达式的数据类型,返回一个字符串。instanceof 用于检查对象是否属于某个类的实例,返回一个布尔值。constructor 用于获取对象的构造函数。
  • typeof 适用于基本数据类型和函数,但不适用于 null 和对象字面量。instanceof 适用于对象,但不适用于基本数据类型和函数。constructor 对所有对象都适用。
  • instanceof 检查的是原型链中是否出现了指定的类(或构造函数)。因此,如果对象是通过继承创建的,实例化时所用的构造函数与对象原型链中的构造函数可能并不相同。
  • constructor 属性可以被重写。因此,在使用 constructor 属性时应该谨慎,以避免产生意外的行为。

学习和指导意义

typeof、instanceof 和 constructor 是 JavaScript 中非常常用的关键字。了解它们的区别和用法,对于理解 JavaScript

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/219

纠错
反馈
相关推荐