Resum
L'operador typeof retorna una cadena de caràcters que representa el tipus de l'operand, que en cap cas és evaluat.
Sintaxi
L'operador typeof va seguit del seu operand:
typeof operand
Paràmetres
operand és una expressió que representa l'objecte o primitive del qual es retornarà el tipus.
Descripció
La taula següent resumeix els possibles valor de typeof. Per més informació sobre tipus i tipus primitius, vegeu també la pàgina de JavaScript data structure.
| Tipus | Resultat |
|---|---|
| Undefined | "undefined" |
| Null | "object" (vegeu a sota) |
| Boolean | "boolean" |
| Number | "number" |
| String | "string" |
| Symbol (nou a l'ECMAScript 6) | "symbol" |
| Host object (proporcionat per l'entorn JS) | Depenent de l'implementació |
| Objecte Funció (implements [[Call]] in ECMA-262 terms) | "function" |
| Qualsevol altre objecte | "object" |
Exemples
Casos normals
// Numbers
typeof 37 === 'number';
typeof 3.14 === 'number';
typeof Math.LN2 === 'number';
typeof Infinity === 'number';
typeof NaN === 'number'; // A pesar de ser un "Not-A-Number"
typeof Number(1) === 'number'; // però no l'utilitzeu mai així!
// Strings
typeof "" === 'string';
typeof "bla" === 'string';
typeof (typeof 1) === 'string'; // typeof sempre retorna una string
typeof String("abc") === 'string'; // però no l'utilitzeu mai així!
// Booleans
typeof true === 'boolean';
typeof false === 'boolean';
typeof Boolean(true) === 'boolean'; // però no l'utilitzeu mai així!
// Symbols
typeof Symbol() === 'symbol'
typeof Symbol('foo') === 'symbol'
typeof Symbol.iterator === 'symbol'
// Undefined
typeof undefined === 'undefined';
typeof blabla === 'undefined'; // una variable no definida
// Objects
typeof {a:1} === 'object';
// utilitzeu Array.isArray o bé Object.prototype.toString.call
// per a diferenciar objectes normals d'arrays
typeof [1, 2, 4] === 'object';
typeof new Date() === 'object';
// Els següents exemples són confusos, no els utilitzeu!
typeof new Boolean(true) === 'object';
typeof new Number(1) === 'object';
typeof new String("abc") === 'object';
// Funcions
typeof function(){} === 'function';
typeof Math.sin === 'function';
null
// Això es manté així des de l'inici de JavaScript typeof null === 'object';
A la primera implementació de JavaScript, els valors de JavaScript es representaven com a una etiqueta de tipus i un valor. L'etiqueta de tipus per objectes era 0. null era representat amb el punter NULL (0x00 a la majoria de plataformes). D'aquesta manera null tenia 0 com a etiqueta de tipus, i això és el que determina que typeof retorni 'object' per a null. (referència)
Es va proposar una esmena per a canviar aquest comportament per l'ECMAScript (via una opt-in), però aquesta va ser rebutjada. El resultat hagués estat typeof null === 'null'.
Expressions regulars
Expressions regulars que poden ser cridades van ser un afegit no standard en alguns navegadors web.
typeof /s/ === 'function'; // Chrome 1-12 No cumpleix l'standard ECMAScript 5.1 typeof /s/ === 'object'; // Firefox 5+ D'acord amb ECMAScript 5.1
Especificacions
| Especificació | Estat | Comentari |
|---|---|---|
| 1a edició ECMAScript. | Estàndard | Definició inicial. Implementat en JavaScript 1.1 |
| ECMAScript 5.1 (ECMA-262) The definition of 'The typeof Operator' in that specification. |
Standard | |
| ECMAScript 2015 (6th Edition, ECMA-262) The definition of 'The typeof Operator' in that specification. |
Standard |
Compatibilitat amb navegadors
| Característica | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
|---|---|---|---|---|---|
| Suport bàsic | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |
| Característica | Android | Chrome per Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
|---|---|---|---|---|---|---|
| Suport bàsic | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |
Els objects host a Internet Explorer són objectes en comptes de funcions
A IE 6, 7, i 8 molts dels host objects són objectes i no funcions. Per exemple:
typeof alert === 'object'