typeof

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 6 (ECMA-262)
The definition of 'The typeof Operator' in that specification.
Release Candidate  

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'

Vegeu també

Document Tags and Contributors

 Contributors to this page: teoli, enTropy, llue
 Last updated by: teoli,