Javascript #2: propriedade undefined

Olá pessoal, tudo certo?

Hoje eu escreverei sobre um tópico simples do javascript, mas que pode ser de muita importância para alguns desenvolvedores (principalmente para quem está iniciando), a comparação com undefined, visto que existe o valor primitivo undefined e a propriedade global undefined.

Em um código javascript não é raro encontrar uma comparação com undefined (x === undefined). No entanto, esta simples comparação pode ser mais complexa do que muitas pessoas imaginam. Você pode se perguntar o que há de especial em x === undefined? Bem, undefined neste caso é uma propriedade global e não um valor. A propriedade global undefined tem
como valor inicial o valor primitivo undefined.

Atualmente não existe mais o problema de poder alterar da propriedade global, visto que no ECMAScript 5 esta propriedade é non-writable. Vamos à um exemplo para ver como isso funciona nos navegadores.

O código utilizado é este:

Função sendo executada no Chrome

Função sendo executada no Chrome

Função sendo executada no Firefox

Função sendo executada no Firefox

Função sendo executada no IE9

Função sendo executada no IE9

Como pode ser visto, Chrome e Firefox atualmente já possuem a propriedade undefined como non-writable, no entando o IE9 ainda não possui. Navegadores mais antigos também permitem alterar o valor de undefined. Para contornar esse problema, seguem três opções de código para garantir que o valor de undefined seja sempre undefined.

Eu particularmente prefiro o exemplo da closure, já que não é necessário redeclarar uma variável undefined para cada método do código, ou ficar comparando o o tipo com typeof.

Este é um detalhe simples, mas que pode trazer alguns transtornos à um código javascript se não for bem tratado.

Referências

MDN

Javascript Garden

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s