-
相同点
- 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 都有其局限性,不能完全覆盖所有的判断情况。在某些特殊情况下,可能需要结合使用多种方法来进行类型判断。