Skip to content

Instantly share code, notes, and snippets.

@charleswvs
Created August 21, 2022 10:09
Show Gist options
  • Save charleswvs/cc57fa8aa1709bf8ef81a720144233dd to your computer and use it in GitHub Desktop.
Save charleswvs/cc57fa8aa1709bf8ef81a720144233dd to your computer and use it in GitHub Desktop.
Como ‘typeof var === “object”’ pode quebrar sua aplicação

Como ‘typeof var === “object”’ pode quebrar sua aplicação

Assunto: Desevolvimento, JavaScript Date Created: August 14, 2022 6:58 AM Status: Revisão

Neste post falaremos um pouco sobre o uso de typeof e como isso pode trazer bugs inesperados e irritantes a sua aplicação.

Acredito que em algum momento da sua vida você precisou uma verificação muito similar a esta:

if (typeof myVar === 'object') {
	console.log(myVar.foo);
}

E talvez tenha visto um erro do tipo:

Cannot read properties of null (reading 'foo')

Mas por que isso aconteceu? null não é um objeto, como o JavaScript aceitou essa condição como verdadeira?

Por mais curioso que seja, isso é um bug no código-fonte do JavaScript! null realmente não deveria ser considerado como um tipo de object, afinal null é um tipo primitivo em JavaScript. Porém nas primeiras versões de seu código fonte, esse problema passou desapercebido pelos criadores, e já era muito tarde quando foi notado, sua correção poderia causar muitos problemas nos códigos escritos em JS que estavam em produção.

Para mais detalhes sobre o código causa isso no motor do JavaScript, visite as referências deste post 👇🏾.

Mas como utilizar typeof myVar === 'object' de maneira que isso não cause problemas em sua aplicação? Isso é bem simples na verdade, basta adicionar mais uma condição:

if (typeof myVar === 'object' && myVar !== null) {
	console.log(myVar.foo);
}

E para deixar o seu código mais limpo e evitar duplicidade, você pode extraí-lo para uma função:

const isObject = (obj) => typeof obj === 'object' && obj !== null;

//...

if (isObject(myVar)) {
	console.log(myVar.foo);
}

Se este post de ajudou de alguma forma não deixe de dar sua palma (lembrando que você pode dar até 50 palmas se tiver gostado muito do conteúdo 😉). Comentários, dúvidas, críticas e sugestões são sempre bem vindos, e não deixei de entrar em contato pelas redes sociais:

Referências

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment