概述
typeof操作符返回一个字符串,
指示未经
计算的操作数的类型。
语法
typeof operand
参数
operand
是一个表达式,表示对象或原始值,其类型将被返回。
描述
下表总结了 typeof
可能的返回值。有关类型和原语的更多信息,可查看 JavaScript数据结构 页面。
类型 | 结果 |
---|---|
Undefined | "undefined" |
Null | "object" (见下方) |
Boolean | "boolean" |
Number | "number" |
String | "string" |
Symbol (ECMAScript 6 新增) | "symbol" |
宿主对象(由JS环境提供) | Implementation-dependent |
函数对象 ( [[Call]] 在ECMA-262条款中实现了) | "function" |
任何其他对象 | "object" |
例子
常规用法
// Numbers
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'; // 但不要使用这种形式!
// Strings
typeof "" === 'string';
typeof "bla" === 'string';
typeof (typeof 1) === 'string'; // typeof总是返回一个字符串
typeof String("abc") === 'string'; // 但不要使用这种形式!
// Booleans
typeof true === 'boolean';
typeof false === 'boolean';
typeof Boolean(true) === 'boolean'; // 但不要使用这种形式!
// Symbols
typeof Symbol() === 'symbol';
typeof Symbol('foo') === 'symbol';
typeof Symbol.iterator === 'symbol';
// Undefined
typeof undefined === 'undefined';
typeof declaredButUndefinedVariable === 'undefined';
typeof undeclaredVariable === 'undefined';
// Objects
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';
// 函数
typeof function(){} === 'function';
typeof Math.sin === 'function';
null
// 从一开始出现JavaScript就是这样的 typeof null === 'object';
在 JavaScript 最初的实现中,JavaScript 中的值是由一个表示类型的标签和实际数据值表示的。对象的类型标签是0。由于 null
代表的是空指针(大多数平台下值为0x00),因此,null
的类型标签也成为了0,typeof null
就错误的返回了"object".(
referenc)
该现象有待于在ECMAScript 6中被修复 (该提议已被否决). 正确的返回值将成为 typeof null === 'null'
.
正则表达式
对正则表达式字面量的类型判断在某些浏览器中不符合标准:
typeof /s/ === 'function'; // Chrome 1-12 , 不符合 ECMAScript 5.1 typeof /s/ === 'object'; // Firefox 5+ , 符合 ECMAScript 5.1
规范
Specification | Status | Comment |
---|---|---|
ECMAScript 2017 Draft (ECMA-262) The typeof Operator |
Draft | |
ECMAScript 2015 (6th Edition, ECMA-262) The typeof Operator |
Standard | |
ECMAScript 5.1 (ECMA-262) The typeof Operator |
Standard | |
ECMAScript 3rd Edition (ECMA-262) The typeof Operator |
Standard | |
ECMAScript 1st Edition (ECMA-262) The typeof Operator |
Standard | Initial definition. Implemented in JavaScript 1.1. |
浏览器兼容性
Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Basic support | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |
Feature | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Basic support | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |
IE 宿主对象是对象而不是函数
在 IE 6, 7 和 8 中,大多数的宿主对象是对象,而不是函数,例如:
typeof alert === 'object'