Verificar se existe uma chave em um objeto JS

88

Tenho o seguinte objeto JavaScript:

var obj = {
    "key1" : val,
    "key2" : val,
    "key3" : val
}

Existe uma maneira de verificar se existe uma chave na matriz, semelhante a esta?

testArray = jQuery.inArray("key1", obj);

não funciona.

Eu tenho que iterar por meio do obj assim?

jQuery.each(obj, function(key,val)){}
user2065483
fonte
4
js - objeto literal :) (não objeto jQuery)
funerr
True;), mostra que não tenho experiência em js - comecei com a biblioteca jQuery desde o início e acredito que preciso aprender o básico ...
user2065483
obj.has("key1")funcionará se você estiver usando ES6.
Diablo
2
Possível duplicata de Verificando se existe uma chave em um objeto JavaScript?
Gerhard Powell
1
@Diablo Acho que você está tentando dizer em obj.hasOwnProperty("key1")vez de apenas has?
Aminu Kano

Respostas:

173

Use o inoperador :

testArray = 'key1' in obj;

Sidenote: O que você tem aí, na verdade não é um objeto jQuery, mas apenas um objeto JavaScript simples.

Sirko
fonte
4
Podemos verificar não inassim?
SagarPPanchal
5
@SagarPanchal O que você quer dizer? Algo assim testArray = !( 'key1' in obj);?
Sirko
49

Isso não é um objeto jQuery, é apenas um objeto.

Você pode usar o método hasOwnProperty para verificar se há uma chave:

if (obj.hasOwnProperty("key1")) {
  ...
}
Guffa
fonte
você não deve usá-lo. diz-se que é lento. a melhor maneira é usar 'chave' no objeto
hannad rehman,
@hannadrehman Você pode me dar uma referência ao documento / artigo onde é mencionado? :)
Nabin
1
@Fan_of_Martijn_Pieters eu sigo o conjunto de regras ESlint estrito. é mencionado lá como uma das regras. eslint.org/docs/rules/no-prototype-builtins
hannad rehman
@hannadrehman Não use a chave no objeto, ela pode estar totalmente errada, esta é a melhor maneira.
Downvoted porque isso não funciona ao detectar chaves com um valor nulo. Por exemplo, se o valor de obj ["key1"] == null (então key1 existe em obj e seu valor é null), isso retornará um resultado falso de que key1 não está em obj.
user1258361
7
var obj = {
    "key1" : "k1",
    "key2" : "k2",
    "key3" : "k3"
};

if ("key1" in obj)
    console.log("has key1 in obj");

======================================================== =========================

Para acessar uma chave filha de outra chave

var obj = {
    "key1": "k1",
    "key2": "k2",
    "key3": "k3",
    "key4": {
        "keyF": "kf"
    }
};

if ("keyF" in obj.key4)
    console.log("has keyF in obj");
Fernando_Jr
fonte
1
Ou se nenhuma if (!("key1" in obj)) { console.log("no key1 in obj"); }
chave1
3

As respostas acima são boas. Mas isso também é bom e útil.

!obj['your_key']  // if 'your_key' not in obj the result --> true

É bom para um estilo curto de código especial em instruções if:

if (!obj['your_key']){
    // if 'your_key' not exist in obj
    console.log('key not in obj');
} else {
    // if 'your_key' exist in obj
    console.log('key exist in obj');
}

Nota: Se sua chave for igual a null ou "" sua instrução "if" estará errada.

obj = {'a': '', 'b': null, 'd': 'value'}
!obj['a']    // result ---> true
!obj['b']    // result ---> true
!obj['c']    // result ---> true
!obj['d']    // result ---> false

Portanto, a melhor maneira de verificar se existe uma chave em um obj é:'a' in obj

Ali Hallaji
fonte
1

Você pode tentar isto:

const data = {
  name : "Test",
  value: 12
}

if("name" in data){
  //Found
}
else {
  //Not found
}
Achsuthan
fonte
1

map.has(key)é a forma mais recente do ECMAScript 2015 de verificar a existência de uma chave em um mapa. Consulte isso para obter detalhes completos.

Diablo
fonte
0

a maneira mais simples é

const obj = {
  a: 'value of a',
  b: 'value of b',
  c: 'value of c'
};

if(obj.a){
  console.log(obj.a);
}else{
  console.log('obj.a does not exist');
}

Khan
fonte
se afor uma string vazia, zero ou nula, ainda retornará 'obj.a não existe', mesmo que a chave aexista.
Twisted Whisper