typeof
和 instanceof
是JavaScript中用来检测变量类型的两个不同的操作符。
typeof
typeof
是一个一元操作符,用来返回一个变量或表达式的类型的字符串表示。对于基本数据类型(Undefined
、Null
、Boolean
、Number
和 String
),typeof
通常能准确地返回其类型。对于 Function
类型,typeof
也会返回 "function"
。但是,对于 Object
类型的数据,除了 Function
类型外,typeof
都会返回 "object"
,这包括 Array
、RegExp
等对象。
例子:
typeof undefined // "undefined"
typeof null // "object" (这是一个历史遗留的bug)
typeof true // "boolean"
typeof 42 // "number"
typeof "Hello" // "string"
typeof {} // "object"
typeof [] // "object"
typeof function(){} // "function"
instanceof
instanceof
是一个二元操作符,用来检测一个对象是否是一个类的实例。在JavaScript中,几乎所有的东西都是对象,instanceof
操作符用来检测一个对象是否是另一个对象的实例。它考虑对象的原型链。
如果对象的原型链中存在一个指向构造函数的 prototype
属性的对象,那么 instanceof
就会返回 true
。
例子:
[] instanceof Array // true
{} instanceof Object // true
function(){} instanceof Function // true
let arr = new Array();
arr instanceof Array // true
arr instanceof Object // true,因为Array是Object的子类
typeof
和 instanceof
在检测类型时有不同的用途和限制。通常,typeof
适用于检测基本数据类型,而 instanceof
适用于检测对象的类型。对于复杂的数据结构,instanceof
是更有用的工具。