比较 typeof 与 instanceof?

54 阅读2分钟
  • 相同点

    • typeof 与 instanceof 都是用来判断一个变量是否为空,或者判断是什么数据类型
  • 不同点

    • typeof 返回一个字符串,用来说明变量的数据类型
    • instanceof 返回一个布尔值,用来判断一个变量是否属于某个对象的实例
    • typeof 一般用来检测基本数据类型,instanceof 一般用来检测引用数据类型

typeof 和 instanceof 是 JavaScript 中用于判断变量类型的操作符,但它们的使用场景和判断方式有所不同。

typeof 操作符用于检测变量的数据类型,返回一个表示该变量类型的字符串。它可以用来判断基本数据类型(如字符串、数字、布尔值、undefined)和函数类型。但对于对象类型(包括数组、对象、null),typeof 返回的都是 "object"。

下面是一些 typeof 的示例:

console.log(typeof "Hello"); // "string"
console.log(typeof 42); // "number"
console.log(typeof true); // "boolean"
console.log(typeof undefined); // "undefined"
console.log(typeof null); // "object"(注意这是 typeof 的一个历史遗留问题)
console.log(typeof function() {}); // "function"
console.log(typeof []); // "object"
console.log(typeof {}); // "object"

instanceof 操作符用于检测对象的类型,它检查一个对象是否是另一个对象的实例。instanceof 运算符需要一个构造函数作为右操作数,左操作数是要检测的对象。它会检查构造函数的原型链上是否存在该对象的原型,如果存在则返回 true,否则返回 false。

下面是一个 instanceof 的示例:

class Person {}

const person = new Person();
console.log(person instanceof Person); // true

const array = [];
console.log(array instanceof Array); // true
console.log(array instanceof Object); // true

const object = {};
console.log(object instanceof Object); // true
console.log(object instanceof Array); // false

typeof 主要用于判断基本数据类型和函数类型,而 instanceof 主要用于判断对象的类型。因此,当需要判断一个对象是否属于某个特定的类时,通常会使用 instanceof,而在需要判断变量的数据类型时,可以使用 typeof。

需要注意的是,typeof 和 instanceof 都有其局限性,不能完全覆盖所有的判断情况。在某些特殊情况下,可能需要结合使用多种方法来进行类型判断。