Проверка наличия ключа в объекте JS

88

У меня есть следующий объект JavaScript:

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

Есть ли способ проверить, существует ли ключ в массиве, подобный этому?

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

не работает.

Нужно ли мне перебирать объект таким образом?

jQuery.each(obj, function(key,val)){}
user2065483
источник
4
js - литерал объекта :) (не объект jQuery)
funerr
Верно;), показывает, что у меня нет фона js - начал с библиотеки jQuery с самого начала, и я считаю, что мне нужно изучить основы ...
user2065483
obj.has("key1")будет работать, если вы используете ES6.
Diablo
2
Возможный дубликат проверки наличия ключа в объекте JavaScript?
Герхард Пауэлл
1
@Diablo Я думаю, ты пытаешься сказать, obj.hasOwnProperty("key1")а не просто has?
Амину Кано

Ответы:

173

Используйте inоператор :

testArray = 'key1' in obj;

Примечание: на самом деле это не объект jQuery, а простой объект JavaScript.

Сирко
источник
4
Можем ли мы проверить не inтак?
SagarPPanchal
5
@SagarPanchal Что ты имеешь в виду? Что-то вроде testArray = !( 'key1' in obj);?
Sirko
49

Это не объект jQuery, это просто объект.

Вы можете использовать метод hasOwnProperty для проверки ключа:

if (obj.hasOwnProperty("key1")) {
  ...
}
Гуффа
источник
вы не должны его использовать. говорят, что он медленный. лучший способ - использовать «ключ» в объекте
Ханнад Рехман
@hannadrehman Вы можете дать мне ссылку на документ / статью, где это упомянуто? :)
Набин
1
@Fan_of_Martijn_Pieters Я следую строгому набору правил ESlint. он упоминается там как одно из правил. eslint.org/docs/rules/no-prototype-builtins
hannad rehman
@hannadrehman Не используйте ключ-в-объекте, это может быть совершенно неправильно, это лучший способ.
Проголосовали против, потому что это не работает при обнаружении ключей с нулевым значением. Например, если значение obj ["key1"] == null (значит, key1 существует в obj и его значение равно null), это вернет ложный результат, что key1 не находится в obj.
user1258361
7
var obj = {
    "key1" : "k1",
    "key2" : "k2",
    "key3" : "k3"
};

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

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

Чтобы получить доступ к дочернему ключу другого ключа

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

if ("keyF" in obj.key4)
    console.log("has keyF in obj");
Fernando_Jr
источник
1
Или если нет ключа1 ..if (!("key1" in obj)) { console.log("no key1 in obj"); }
Hastig Zusammenstellen
3

Вышеупомянутые ответы хороши. Но это тоже хорошо и полезно.

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

Это хорошо для короткого стиля кода, особенно в операторах 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');
}

Примечание. Если ваш ключ равен нулю или "" ваш "if" оператор будет неправильным.

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

Итак, лучший способ проверить, существует ли ключ в объекте:'a' in obj

Али Халладжи
источник
1

Вы можете попробовать это:

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

if("name" in data){
  //Found
}
else {
  //Not found
}
Ахсутан
источник
1

map.has(key)это последний способ проверки наличия ключа на карте в ECMAScript 2015 . Обратитесь к этому для получения полной информации.

Diablo
источник
0

самый простой способ

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');
}

Хан
источник
если aэто пустая строка, ноль или ноль, она все равно вернет «obj.a не существует», даже если ключ aсуществует.
Twisted Whisper