undefined
BaselineWidely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
Resumo
O valor globalundefined
representa um valor indefinido. Trata-se de um dostipos primitivos do JavaScript.
Property attributes ofundefined | |
---|---|
Writable | no |
Enumerable | no |
Configurable | no |
Sintaxe
undefined
Descrição
Oundefined
é uma propriedade do objetoglobal
, ou seja, é uma variável no escopo global. O valor inicial deundefined
é o valor primitivoundefined
.
Nos browsers modernos (JavaScript 1.8.5 / Firefox 4+), a especificação ECMAScript 5 define que oundefined
é 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 tipoundefined
. Um método ou sentença também retornaundefined
se a variável que está sendo avaliada não tem um valor atribuído. Uma função retornaundefined
se um valor não forretornado
.
Uma vez que undefined não é umapalavra reservada
, ele pode ser usado como umidentificador (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 (===) eundefined
Voce pode utilizarundefined
com os operadores de igualdade e desigualdade estritas para determinar se a variável possui um valor. No código a seguir, a variávelx
não foi definida, e o resultado doif
é verdadeiro.
var x;if (x === undefined) { // sentenças aqui são executadas} else { // o código aqui não é executado}
Nota:O operador de igualdade estrita (===
) tem que ser utilizado aqui uma vez quex == undefined
também checa sex
é nulo, enquanto o operador não o faz.null
não é equivalente àundefined
. Vejaoperadores de comparação
(em inglês) para maiores detalhes.
Operador Typeof
eundefined
Alternativamente,typeof
pode ser usado:
var x;if (typeof x === "undefined") { // esse código é executado}
Uma das principais razões para usar otypeof
é que ele não lança erros caso a variável não tenha sido inicializada.
// x não foi atribuída anteriormenteif (typeof x === "undefined") { // retorna 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 operadorin
, por exemplo.
Operador Void
eundefined
O operadorvoid
é a terceira alternativa.
var x;if (x === void 0) { // esse código executa}// y não foi definido antesif (y === void 0) { // lança uma ReferenceError (ao contrário de `typeof`)}
Especificações
Specification |
---|
ECMAScript® 2026 Language Specification # sec-undefined |