instanceof和typeof的区别

typeof

typeof和instanceof都是用来判断值或对象的类型的操作符或运算符。

typeof 123; // "number"
typeof "abc"; // "string"
typeof true; // "boolean"
typeof undefined; // "undefined"
typeof {}; // "object"
typeof []; // "object"
typeof function(){}(); // "function"

可以看到,对于数字、字符串、布尔值、未定义和空对象,typeof 都返回了相应的类型字符串。但是对于数组和函数,它的返回值都是 “object”,因为它们的数据类型都是对象。需要注意的是,如果是一个未声明的变量,typeof 会返回 “undefined”。另外值得注意的是typeof Null 返回的也是 『object』

typeof的原理是通过检查值的内部表示来确定其数据类型。它返回一个字符串,表示值的数据类型。对于基本数据类型(如number、string、boolean),typeof可以直接返回相应的字符串。对于对象类型(如object、function),typeof返回”object”,无法区分具体的对象类型。

instanceof

instanceof的原理是通过检查对象的原型链来确定其是否是某个类或构造函数的实例。每个对象都有一个内部属性[[Prototype]],指向其原型对象。instanceof会沿着对象的原型链向上查找,直到找到指定的类或构造函数的原型对象,如果找到则返回true,否则返回false。

var arr = [1, 2, 3];
arr instanceof Array; // true
arr instanceof Object; // true
arr instanceof Number; // false
arr instanceof String; // false
arr instanceof Function; // false

需要注意的是,instanceof 运算符只能判断对象是否是某个构造函数的实例,而不能判断对象是否具有某个原型链上的属性或方法。

区别:

typeof用于确定一个值的数据类型,而instanceof用于检查一个对象是否是某个类或构造函数的实例。
typeof返回一个字符串,表示值的数据类型,而instanceof返回一个布尔值,表示对象是否是某个类或构造函数的实例。

应用场景:

typeof常用于判断一个值的数据类型,可以用于条件判断、类型转换等操作。例如,可以使用typeof来判断一个变量是否为数字类型,从而进行相应的处理。

instanceof常用于判断一个对象是否是某个类或构造函数的实例,可以用于实现继承、多态等面向对象的特性。例如,可以使用instanceof来判断一个对象是否是某个类的实例,从而执行相应的方法或操作。