typeof
是 JavaScript 中的一个运算符,用于返回操作数的数据类型。它通常用于检查变量的类型或确定表达式的类型。typeof
返回一个表示类型的字符串值。以下是 typeof
可能返回的几种类型:
"undefined"
: 如果操作数未定义。"boolean"
: 如果操作数是布尔值(true 或 false)。"string"
: 如果操作数是字符串。"number"
: 如果操作数是数字(包括整数和浮点数)。"bigint"
: 如果操作数是 BigInt 类型(ES2020 引入)。"object"
: 如果操作数是对象、数组或 null(注意:null
也被认为是对象,这是 JavaScript 的历史遗留问题)。"function"
: 如果操作数是一个函数。"symbol"
: 如果操作数是 Symbol 类型(ES6 引入)。
使用示例
console.log(typeof undefined); // "undefined"
console.log(typeof true); // "boolean"
console.log(typeof "hello"); // "string"
console.log(typeof 42); // "number"
console.log(typeof 123n); // "bigint"
console.log(typeof {}); // "object"
console.log(typeof null); // "object" (这是一个历史遗留问题)
console.log(typeof function(){}); // "function"
console.log(typeof Symbol()); // "symbol"
注意事项
-
null
的类型:如上所述,typeof null
返回"object"
,这实际上是一个错误,源于 JavaScript 的早期版本中的一个设计缺陷。 -
检测对象类型:对于更精确的对象类型检测(例如区分普通对象和数组),您可能需要使用其他方法,比如
Array.isArray()
或者Object.prototype.toString.call()
方法。console.log(Array.isArray([])); // true console.log(Object.prototype.toString.call([]) === '[object Array]'); // true
-
检测函数:虽然
typeof
可以区分函数和其他对象,但在某些环境中(如浏览器环境),您可能会遇到宿主对象,它们的行为可能与预期不同。因此,在严格模式下或当您不确定时,可以考虑使用其他方式来检测函数。