typeof 和 instanceof 都是 JavaScript 中的运算符,用于检查数据类型或对象的类型。它们有不同的用途和适用场景:
1. typeof
- 作用:返回变量的数据类型,适用于原始数据类型(如
number、string、boolean等)。 - 使用场景:判断一个变量是否为基本类型,如
undefined、number、string、boolean、object(包括null)、function等。 - 例子:
console.log(typeof 42); // "number" console.log(typeof "Hello"); // "string" console.log(typeof undefined); // "undefined" console.log(typeof {}); // "object" console.log(typeof null); // "object" console.log(typeof []); // "object" console.log(typeof console); // "object" console.log(typeof console.log); // "function"
注意:对于数组和 null,typeof 会返回 "object",因此不适合用于区分复杂对象。如果你需要在if语句中判断是否为null,直接通过===null来判断就好。如果我们要判断一个变量是否存在,可以使用typeof:(不要使用if(a),若a未声明,则报错)
if (typeof a != 'undefined') {
// 变量存在
}
2. instanceof
- 作用:用于检测一个对象是否是某个构造函数的实例,适用于引用数据类型(如
Array、Function、自定义对象等)。 - 使用场景:判断某个对象是否继承自某个构造函数的原型链,用于复杂对象类型的判断。
- 例子:
console.log([] instanceof Array); // true console.log({} instanceof Object); // true console.log(function(){} instanceof Function); // true console.log(Object instanceof constructor); // true
Object为实例对象,constructor为构造函数,构造函数通过new可以实例对象,instanceof能判断这个对象是否是之前那个构造函数生成的对象。
// 定义构造函数
let Car = function() {}
let benz = new Car()
console.log(benz instanceof Car); // true
let car = new String('xxx');
console.log(car instanceof String); // true
let str = 'xxx';
console.log(str instanceof String); // false
注意:instanceof 适用于对象和类的关系检测,无法用于基本类型的判断。
区别:
typeof更适合基本类型的检测,而instanceof适合检测对象的原型链。typeof是单一操作符,不需要参数,instanceof是用于检测对象的构造函数匹配。
使用建议:
- 如果需要判断一个变量的 基本类型,用
typeof。 - 如果判断变量是某个 类的实例,用
instanceof。
318

被折叠的 条评论
为什么被折叠?



