Como saber se uma propriedade existe em um objeto?

Já parou para pensar, qual a melhor forma de verificar se o objeto possui uma chave com JS?

Transcrição

objeto.hasOwnProperty(chave) ⇒ true ou false

Objetos em JS possuem o método hasOwnProperty(chave), que aceita uma chave como parâmetro, retornando true ou false. Porém, apenas verifica propriedades da sua instância, não verificando campos herdados, por exemplo.

const pessoa = {
  nome: null
}

pessoa.toString // function toString()
pessoa.hasOwnProperty('nome') // true
pessoa.hasOwnProperty('toString') // false

Ah, e se o objeto for um array, ele também verifica o índice.

Além disso, o método pode ser sobreescrito de diversas formas não previstas:

req.body = { hasOwnProperty: null }

req.body.hasOwnProperty('nome')
// TypeError req.body.hasOwnProperty is not a function

Reflect.has(objeto, chave) ⇒ true ou false

Esse método estático verifica se o objeto passado como parâmetro possui a determinada chave - incluindo propriedades herdadas -, retornando true ou false

const pessoa = {
  nome: null
}

Reflect.has(pessoa, 'nome') // true
Reflect.has(pessoa, 'toString') // true

‘chave’ in objeto

Assim como o Reflect.has(), o operador in verifica se a propriedade existe no objeto!

const pessoa = {
  nome: null
}

'nome' in pessoa // true
'toString' in pessoa // true

Qual a melhor? Você decide. Eu gosto de usar Reflect.has() e in.

Recomendações:

comments powered by Disqus