typeof
是 JavaScript 中的一个一元运算符,用于检测一个变量或表达式的类型。它会返回一个字符串,表示未经计算的操作数的数据类型。
typeof operand
typeof
运算符会返回以下字符串之一:
"undefined"
: 如果操作数未定义。"boolean"
: 如果操作数是布尔值。"number"
: 如果操作数是数字。"string"
: 如果操作数是字符串。"bigint"
: 如果操作数是 BigInt 类型(ES2020 引入)。"symbol"
: 如果操作数是 Symbol 类型(ES6 引入)。"function"
: 如果操作数是函数。"object"
: 如果操作数是对象或 null
(这是一个历史遗留问题,typeof null
会返回 "object"
,实际上 null
是一个基本数据类型)。console.log(typeof undefined); // "undefined"
console.log(typeof true); // "boolean"
console.log(typeof 42); // "number"
console.log(typeof "Hello"); // "string"
console.log(typeof BigInt(9007199254740991)); // "bigint"
console.log(typeof Symbol("sym")); // "symbol"
console.log(typeof function() {}); // "function"
console.log(typeof null); // "object"(注意这是一个历史遗留问题)
console.log(typeof {}); // "object"
console.log(typeof []); // "object"(数组也是对象)
typeof
对于基本数据类型(除了 null
)的检测是准确的,但对于引用数据类型(如对象、数组、日期等)都会返回 "object"
,因此它不能准确地区分这些类型。null
,typeof
返回 "object"
,这是一个已知的历史遗留问题。如果需要准确检测 null
,可以使用严格相等运算符(===
)。typeof
返回 "function"
,这是一个特例,因为函数在 JavaScript 中实际上是对象的一种特殊类型。typeof
进行类型检查,以确保参数类型正确。typeof
来检查变量的类型,以帮助定位问题。typeof
的局限性由于 typeof
对于引用数据类型的检测不够准确,可以使用其他方法来弥补这一不足,例如:
instanceof
运算符来检测对象的具体类型(如 array instanceof Array
)。Object.prototype.toString.call()
方法来获取对象的内部 [[Class]]
属性,从而判断对象的具体类型(如 Object.prototype.toString.call([]) === "[object Array]"
)。领取专属 10元无门槛券
手把手带您无忧上云