Verificação de existência de chave em objeto JavaScript: 3 maneiras para iniciantes

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Verificação de existência de chave em objeto JavaScript: análise para iniciantes

\n\n

Você já tentou obter um valor de um objeto JavaScript e recebeu um misterioso undefined? Situação familiar, certo? Especialmente quando se trabalha com dados de API, configurações ou apenas estruturas grandes. Hoje vamos entender de uma vez por todas como verificar corretamente se uma chave existe em um objeto. Esta é uma das perguntas mais populares no Stack Overflow — e não é à toa.

\n\n

Imagine que o objeto é um armário com gavetas. Você quer saber se há uma gaveta com a etiqueta "chaves". Pode simplesmente puxar a alça (e receber um erro se a gaveta não existir), ou pode primeiro olhar e ter certeza. Em JavaScript, temos três maneiras confiáveis de fazer isso. Vamos lá!

\n\n

Por que verificar a existência de uma chave?

\n\n

Suponha que você está escrevendo um aplicativo para lista de compras. Você tem um objeto cart que pode conter itens com quantidade:

\n\n
const cart = {\n  apples: 3,\n  bananas: 5\n};\n\n// Queremos adicionar peras, mas não sabemos se elas já existem\nfunction addItem(item, quantity) {\n  if (cart[item] !== undefined) {\n    cart[item] += quantity;\n  } else {\n    cart[item] = quantity;\n  }\n}
\n\n

Este código funciona, mas tem armadilhas. E se o valor da chave for 0 ou null? Então a verificação de undefined dará um resultado falso. Portanto, vamos analisar abordagens profissionais.

\n\n

Método 1: Operador in — o soldado universal

\n\n

O operador in verifica se uma propriedade existe no objeto, incluindo propriedades herdadas. Esta é a maneira mais confiável quando você precisa saber se uma chave existe.

\n\n
const user = {\n  name: 'Ana',\n  age: 25,\n  isAdmin: false\n};\n\nconsole.log('name' in user);    // true\nconsole.log('age' in user);     // true\nconsole.log('salary' in user);  // false\nconsole.log('toString' in user); // true (herdado de Object)
\n\n

Vantagens: funciona mesmo se o valor for null, undefined ou false. Verifica toda a cadeia de protótipos.

\n\n

Desvantagens: pode encontrar propriedades herdadas que você não precisa. Por exemplo, toString ou hasOwnProperty.

\n\n

Para a maioria dos casos, in é a escolha ideal. Especialmente quando você trabalha com objetos-dicionário comuns.

\n\n

Método 2: hasOwnProperty() — apenas suas próprias chaves

\n\n

Se você precisa verificar apenas as propriedades próprias do objeto (não herdadas), use o método hasOwnProperty. Este é um método padrão de todos os objetos em JavaScript.

\n\n
const book = {\n  title: 'JavaScript para Leigos',\n  pages: 300\n};\n\nconsole.log(book.hasOwnProperty('title'));   // true\nconsole.log(book.hasOwnProperty('pages'));   // true\nconsole.log(book.hasOwnProperty('toString')); // false (não é propriedade própria)\nconsole.log(book.hasOwnProperty('author'));   // false
\n\n

Observe: hasOwnProperty não verifica propriedades herdadas. Isso o torna indispensável quando você cria objetos com classes ou protótipos.

\n\n

Mas há uma nuance! Se o seu objeto foi criado com Object.create(null), ele não terá o método hasOwnProperty. O que fazer? Use uma chamada segura:

\n\n
const dict = Object.create(null);\ndict.key1 = 'value1';\n\n// Isso não funciona:\n// console.log(dict.hasOwnProperty('key1')); // TypeError\n\n// Mas isso sim:\nconsole.log(Object.prototype.hasOwnProperty.call(dict, 'key1')); // true
\n\n

A sintaxe moderna permite usar Object.hasOwn() — um método estático adicionado no ES2022. Ele resolve esse problema de forma elegante:

\n\n
console.log(Object.hasOwn(dict, 'key1')); // true
\n\n

Recomendo usar Obj

Blogs

Book Recommendations