MDN wants to learn about developers like you: https://qsurvey.mozilla.com/s3/MDN-dev-survey

Resumo

O valor global undefined representa um valor indefinido. Trata-se de um dos tipos primitivos do JavaScript.

Property attributes of undefined
Writable no
Enumerable no
Configurable no

Sintaxe

undefined

Descrição

O undefined é uma propriedade do objeto global, ou seja, é uma variável no escopo global. O valor inicial de undefined é o valor primitivo undefined.

Nos browsers modernos (JavaScript 1.8.5 / Firefox 4+), a especificação ECMAScript 5 define que o undefined é uma propriedade não configurável e somente leitura. Mesmo quando esse não for o caso, evite sobrescrevê-lo.

Uma variável que não teve um valor atribuído é do tipo undefined. Um método ou sentença também retorna undefined se a variável que está sendo avaliada não tem um valor atribuído. Uma função retorna undefined se um valor não for retornado.

Uma vez que undefined não é uma palavra reservada, ele pode ser usado como um identificador (nome de variável) em qualquer escopo que não seja o escopo global.

// escreve no console "foo string"
(function(){ var undefined = 'foo'; console.log(undefined, typeof undefined); })();

// escreve no console "foo string"
(function(undefined){ console.log(undefined, typeof undefined); })('foo');

Exemplos

Igualdade estrita (===) e undefined

Voce pode utilizar undefined com os operadores de igualdade e desigualdade estritas para determinar se a variável possui um valor. No código a seguir, a variável x não foi definida, e o resultado do if é verdadeiro.

var x;
if (x === undefined) {
   // sentenças aqui são executadas
}
else {
   // o código aqui não é executado
}

Observação: O operarador de igualdade estrita (===) tem que ser utilizado aqui uma vez que x == undefined também checa se x é nulo, enquanto o operador não o faz. null não é equivalente à undefined. Veja operadores de comparação (em inglês) para maiores detalhes.

Operador Typeof e undefined

Alternativamente, typeof pode ser usado:

var x;
if (typeof x === 'undefined') {
   // esse código é executado
}

Uma das principais razões para usar o typeof é que ele não lança erros caso a variável não tenha sido inicializada.

// x não foi atribuída anteriormente
if (typeof x === 'undefined') { // returna verdadeiro sem lançar erros
   // esse código executa
}

if(x === undefined){ // lança um ReferenceError para x

}

No entanto, esse tipo de técnica deveria ser evitada. A linguagem JavaScript é uma linguagem com escopo estático, portanto o conhecimento sobre se uma variável está definida pode ser adquirido pela verificação de sua definição dentro do contexto à qual ela pertence. A única exceção é para o escopo global. No entanto, o escopo global é anexado ao objeto global, portanto a verificação da existência de uma variável no contexto global pode ser feita através de uma checagem na propriedade do objeto global usando o operador in, por exemplo.

Operador Void e undefined

O  operador void é a terceira alternativa.

var x;
if (x === void 0) {
   // esse código executa
}

// y não foi definido antes
if (y === void 0) {
   // lança uma ReferenceError (ao contrário de `typeof`)
}

Especificação

Especificação Status Comentários
ECMAScript 1st Edition. Standard Definição inicial. Implementado no JavaScript 1.3
ECMAScript 5.1 (ECMA-262)
The definition of 'undefined' in that specification.
Standard  
ECMAScript 6 (ECMA-262)
The definition of 'undefined' in that specification.
Release Candidate  

Compatibilidade entre navegadores

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)

 

Etiquetas do documento e colaboradores

 Colaboradores desta página: trestini
 Última atualização por: trestini,