Como verificar se há indefinido em JavaScript

Quando uma variável é declarada sem ter um valor atribuído, seu valor inicial é undefined.

Como você verifica se um valor é undefined em JavaScript?

A resposta curta

Em navegadores modernos, você pode comparar a variável com segurança diretamente para undefined:

Algumas pessoas argumentam contra a comparação com undefined porque os navegadores antigos permitiam que seu valor fosse reatribuído desta forma:

Depois dessa reatribuição, comparando com undefined diretamente não detectaria mais corretamente se uma variável recebeu um valor.

No entanto, esse comportamento foi corrigido em 2009 com ECMAScript 5:

Em navegadores modernos, ” não é mais possível reatribuir o valor undefined global.

E se eu precisar de suporte para IE8 e anteriores?

Geralmente, comparando diretamente a un definido ainda é seguro. Não há razão prática para um aplicativo reatribuir o valor de undefined.

Thomas Eding demonstra isso com uma analogia convincente:

Se você ainda estiver preocupado, há duas maneiras de verificar se um valor está indefinido, mesmo que o undefined global tenha sido substituído.

Você pode usar o operador void para obter o valor de undefined. Isso funcionará mesmo se o valor global window.undefined tiver sido sobrescrito:

O zero neste exemplo não tem nenhum significado especial, você também pode usar 1 ou function(){}. void(anything) sempre será avaliado como undefined.

Como alternativa, você pode usar o operador typeof para verificar com segurança se um valor foi atribuído. Em vez de comparar com o valor undefined global, você verifica se o valor “s type é” undefined “:

Observe que isso é um pouco diferente das opções anteriores. Mesmo se name não fosse “declarado typeof, ainda diria que está indefinido. Se você comparou uma variável não declarada a undefined ou void(0), você obteria um ReferenceError.

Mas não use void (0) diretamente

Evite usar void(0) ou typeof x === "undefined" literalmente no código. Essas expressões não são autoexplicativas e devem ser incluídas em uma função isUndefined como esta:

Muitas bibliotecas de utilitários já têm essa funcionalidade incorporada, por exemplo, há um _.isUndefined em Underscore.js.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *