typeof

typeof 操作符返回一个字符串,表示未经计算的操作数的类型。

语法

typeof operand;

参数

参数说明
perand是一个表达式,表示对象或原始值,其类型将被返回

返回值

下表总结了 typeof 可能的返回值。

有关类型和原始值的更多信息,可查看 JavaScript 数据结构 页面。

类型结果
Undefined'undefined'
Null'object'
Boolean'boolean'
Number'number'
String'string'
Symbol'symbol'
宿主对象Implementation-dependent
函数对象'function'
任何其他对象'object'

示例

代码示例

Number

typeof 37 === 'number';
typeof 3.14 === 'number';
typeof Math.LN2 === 'number';
typeof Infinity === 'number';
typeof NaN === 'number';
// 尽管 NaN 是 "Not-A-Number" 的缩写
typeof Number(1) === 'number';
// 但不要使用这种形式!

String

typeof '' === 'string';
typeof 'bla' === 'string';
typeof typeof 1 === 'string';
// typeof 总是返回一个字符串
typeof String('abc') === 'string';
// 但不要使用这种形式!

Boolean

typeof true === 'boolean';
typeof false === 'boolean';
typeof Boolean(true) === 'boolean';
// 但不要使用这种形式!

Symbol

typeof Symbol() === 'symbol';
typeof Symbol('foo') === 'symbol';
typeof Symbol.iterator === 'symbol';

Undefined

typeof undefined === 'undefined';
typeof declaredButUndefinedVariable === 'undefined';
typeof undeclaredVariable === 'undefined';

Object

typeof { a: 1 } === 'object';
// 使用Array.isArray 或者 Object.prototype.toString.call
// 区分数组,普通对象
typeof [1, 2, 4] === 'object';
typeof new Date() === 'object';
// 下面的容易令人迷惑,不要使用!
typeof new Boolean(true) === 'object';
typeof new Number(1) === 'object';
typeof new String('abc') === 'object';

Function

typeof function () {} === 'function';
typeof class C {} === 'function';
typeof Math.sin === 'function';
typeof new Function() === 'function';

特殊的 null

typeof null === 'object';
// 从一开始出现 JavaScript 就是这样的

在 JavaScript 最初的实现中,JavaScript 中的值是由一个表示类型的标签和实际数据值表示的。对象的类型标签是 0。由于 null 代表的是空指针(大多数平台下值为 0x00),因此,null 的类型标签也成为了 0,typeof null 就错误的返回了 "object"

ECMAScript 提出了一个修复(通过 opt-in),但被拒绝。这将导致 typeof null === 'object'