typeof

  • Revision slug: JavaScript/Reference/Operators/typeof
  • Revision title: typeof
  • Revision id: 356481
  • Criado:
  • Criador: HenriqueSilverio
  • É a revisão atual? Não
  • Comentar

Conteúdo da revisão

Sumário

O operador typeof retorna uma string indicando o tipo de um operando.

Operator
Implementado em: JavaScript 1.1
ECMA Versão: ECMA-262 (and ECMA-357 for E4X objects)

Sintaxe

O operador typeof pode ser utilizado das seguintes maneiras:

  1. typeof operando
  2. typeof (operando)

Parâmetros

operand é a string, variável, keyword, ou objeto para que o tipo do mesmo seja retornado. O uso de parênteses é opicional.

Descrição

Esta tabela resumo os possíveis valores que são retornados pelo typeof:

Tipo Resultado
Undefined "undefined"
Null "object"
Boolean "boolean"
Number "number"
String "string"
Host object (provided by the JS environment) Implementation-dependent
Function object (implements [[Call]] in ECMA-262 terms) "function"
E4X XML object "xml"
E4X XMLList object "xml"
Any other object "object"

Exemplos

Normal cases

// Numbers
typeof 37 === 'number';
typeof 3.14 === 'number';
typeof Math.LN2 === 'number';
typeof Infinity === 'number';
typeof NaN === 'number'; // Despite being "Not-A-Number"
typeof Number(1) === 'number'; // but never use this form!

// Strings
typeof "" === 'string';
typeof "bla" === 'string';
typeof (typeof 1) === 'string'; // typeof always return a string
typeof String("abc") === 'string'; // but never use this form!

// Booleans
typeof true === 'boolean';
typeof false === 'boolean';
typeof Boolean(true) === 'boolean'; // but never use this form!

// Undefined
typeof undefined === 'undefined';
typeof blabla === 'undefined'; // an undefined variable

// Objects
typeof {a:1} === 'object';
typeof [1, 2, 4] === 'object'; // use Array.isArray or Object.prototype.toString.call to differentiate regular objects from arrays
typeof new Date() === 'object';

typeof new Boolean(true) === 'object'; // this is confusing. Don't use!
typeof new Number(1) === 'object'; // this is confusing. Don't use!
typeof new String("abc") === 'object';  // this is confusing. Don't use!

// Functions
typeof function(){} === 'function';
typeof Math.sin === 'function';

null

typeof null === 'object'; // This stands since the beginning of JavaScript

Na primeira implamentação do JavaScript, valores em JavaScript foram representados com uma tag de tipo e um valor. A tag de tipo para objetos foi 0. null foi representada com o nome NULL (0x00 na maioria das plataformas). Consequentemente, null teve 0 como sua tag de tipo, portanto o typeof retorna esse valor. (necessário referência)

Isso está previsto para ser corrigido na próxima versão do ECMAScript (que estará disponível através de um opt-in). Isso resultará em um typeof null === 'null'.

Expressões regulares

Expressões regulares que podem ser chamadas foram uma adição não-padrão em alguns browsers (necessidade de referência para dizer qual).

typeof /s/ === 'function'; // Chrome 1-12 ... // Non-conform to ECMAScript 5.1
typeof /s/ === 'object'; // Firefox 5+ ...    // Conform to ECMAScript 5.1

Outras peculiaridades

alert versões antigas do Internet Explorer

No IE 6, 7 e 8, typeof alert === 'object'

Especificação

ECMA-262 section 11.4.3

Veja também

Fonte da revisão

<h2 id="Summary">Sumário</h2>
<p>O operador <code>typeof</code> retorna uma string indicando o tipo de um operando.</p>
<table class="standard-table">
  <thead>
    <tr>
      <th colspan="2" scope="col">Operator</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Implementado em:</td>
      <td>JavaScript 1.1</td>
    </tr>
    <tr>
      <td>ECMA Versão:</td>
      <td>ECMA-262 (and ECMA-357 for E4X objects)</td>
    </tr>
  </tbody>
</table>
<h2 id="Syntax">Sintaxe</h2>
<p><code>O operador typeof</code> pode ser utilizado das seguintes maneiras:</p>
<ol>
  <li><code>typeof operando</code></li>
  <li><code>typeof (</code><code>operando</code><code>)</code></li>
</ol>
<h3 id="Parameters">Parâmetros</h3>
<p><code><em>operand</em></code> é a string, variável, keyword, ou objeto para que o tipo do mesmo seja retornado. O uso de parênteses é opicional.</p>
<h2 id="Description">Descrição</h2>
<p>Esta tabela resumo os possíveis valores que são retornados pelo <code>typeof</code>:</p>
<table class="standard-table">
  <thead>
    <tr>
      <th scope="col">Tipo</th>
      <th scope="col">Resultado</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Undefined</td>
      <td><code>"undefined"</code></td>
    </tr>
    <tr>
      <td>Null</td>
      <td><code>"object"</code></td>
    </tr>
    <tr>
      <td>Boolean</td>
      <td><code>"boolean"</code></td>
    </tr>
    <tr>
      <td>Number</td>
      <td><code>"number"</code></td>
    </tr>
    <tr>
      <td>String</td>
      <td><code>"string"</code></td>
    </tr>
    <tr>
      <td>Host object (provided by the JS environment)</td>
      <td><em>Implementation-dependent</em></td>
    </tr>
    <tr>
      <td>Function object (implements [[Call]] in ECMA-262 terms)</td>
      <td><code>"function"</code></td>
    </tr>
    <tr>
      <td>E4X XML object</td>
      <td>"xml"</td>
    </tr>
    <tr>
      <td>E4X XMLList object</td>
      <td>"xml"</td>
    </tr>
    <tr>
      <td>Any other object</td>
      <td><code>"object"</code></td>
    </tr>
  </tbody>
</table>
<h2 id="Examples">Exemplos</h2>
<h3 id="Normal_cases">Normal cases</h3>
<pre class="brush:js">
// Numbers
typeof 37 === 'number';
typeof 3.14 === 'number';
typeof Math.LN2 === 'number';
typeof Infinity === 'number';
typeof NaN === 'number'; // Despite being "Not-A-Number"
typeof Number(1) === 'number'; // but never use this form!

// Strings
typeof "" === 'string';
typeof "bla" === 'string';
typeof (typeof 1) === 'string'; // typeof always return a string
typeof String("abc") === 'string'; // but never use this form!

// Booleans
typeof true === 'boolean';
typeof false === 'boolean';
typeof Boolean(true) === 'boolean'; // but never use this form!

// Undefined
typeof undefined === 'undefined';
typeof blabla === 'undefined'; // an undefined variable

// Objects
typeof {a:1} === 'object';
typeof [1, 2, 4] === 'object'; // use Array.isArray or Object.prototype.toString.call to differentiate regular objects from arrays
typeof new Date() === 'object';

typeof new Boolean(true) === 'object'; // this is confusing. Don't use!
typeof new Number(1) === 'object'; // this is confusing. Don't use!
typeof new String("abc") === 'object';  // this is confusing. Don't use!

// Functions
typeof function(){} === 'function';
typeof Math.sin === 'function';
</pre>
<h3 id="null"><code>null</code></h3>
<pre class="brush:js">
typeof null === 'object'; // This stands since the beginning of JavaScript
</pre>
<p>Na primeira implamentação do JavaScript, valores em JavaScript foram representados com uma tag de tipo e um valor. A tag de tipo para objetos foi 0. <code>null</code> foi representada com o nome NULL (0x00 na maioria das plataformas). Consequentemente, null teve 0 como sua tag de tipo, portanto o <code>typeof</code> retorna esse valor. (necessário referência)</p>
<p>Isso está previsto <a class="external" href="http://wiki.ecmascript.org/doku.php?id=harmony:typeof_null">para ser corrigido na próxima versão do ECMAScript</a> (que estará disponível através de um opt-in). Isso resultará em um <code>typeof null === 'null'</code>.</p>
<h3 id="Regular_expressions">Expressões regulares</h3>
<p>Expressões regulares que podem ser chamadas foram uma adição não-padrão em alguns browsers (<span id="result_box" lang="pt"><span class="hps">necessidade</span> <span class="hps">de referência</span> <span class="hps">para dizer</span> <span class="hps">qual</span></span>).</p>
<pre class="brush:js">
typeof /s/ === 'function'; // Chrome 1-12 ... // Non-conform to ECMAScript 5.1
typeof /s/ === 'object'; // Firefox 5+ ...    // Conform to ECMAScript 5.1
</pre>
<h3 id="Other_quirks">Outras peculiaridades</h3>
<h4 id="alert_in_old_Internet_Explorer_versions"><code>alert</code> versões antigas do Internet Explorer</h4>
<p>No IE 6, 7 e 8, <code>typeof alert === 'object'</code></p>
<h2 id="Specification">Especificação</h2>
<p><a class="external" href="http://ecma-international.org/ecma-262/5.1/#sec-11.4.3">ECMA-262 section 11.4.3</a></p>
<h2 id="See_also">Veja também</h2>
<ul>
  <li><a href="/en-US/docs/JavaScript/Reference/Operators/instanceof" title="/en-US/docs/JavaScript/Reference/Operators/instanceof">instanceof</a></li>
</ul>
Reverter para esta revisão