Перевірка наявності ключа в об’єкті JS


88

У мене є такий об’єкт JavaScript:

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

Чи є спосіб перевірити, чи існує ключ у масиві, подібний до цього?

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

не працює.

Чи повинен я перебирати об'єкт так?

jQuery.each(obj, function(key,val)){}

4
js - об'єктний літерал :) (не об'єкт jQuery)
funerr

Правда;), показує, що у мене немає js-фону - розпочато з бібліотеки jQuery з самого початку, і я вважаю, що мені потрібно вивчити основи ...
user2065483

obj.has("key1")спрацює, якщо ви використовуєте ES6.
Діабло


1
@Diablo Я думаю, ти намагаєшся сказати obj.hasOwnProperty("key1")замість просто has?
Aminu Kano

Відповіді:


173

Використовуйте inоператор :

testArray = 'key1' in obj;

Sidenote: Те, що ви там отримали, насправді не є об’єктом jQuery, а просто звичайним об’єктом JavaScript.


4
Чи можемо ми перевірити не inтак?
SagarPPanchal

5
@SagarPanchal Що ти маєш на увазі? Щось на зразок testArray = !( 'key1' in obj);?
Сірко

49

Це не об’єкт jQuery, це просто об’єкт.

Ви можете використовувати метод hasOwnProperty, щоб перевірити наявність ключа:

if (obj.hasOwnProperty("key1")) {
  ...
}

ви не повинні ним користуватися. кажуть, що це повільно. найкращий спосіб - використовувати 'key' в об'єкті
hannad rehman

@hannadrehman Чи можете ви дати мені посилання на документ / статтю, де вона згадується? :)
Набін

1
@Fan_of_Martijn_Pieters я дотримуюся суворого набору правил ESlint. там це згадується як одне з правил. eslint.org/docs/rules/no-prototype-builtins
hannad rehman

@hannadrehman Не використовуйте key-in-object, це може бути просто неправильно, це найкращий спосіб.

Проголосовано проти, оскільки це не працює при виявленні ключів із нульовим значенням. Наприклад, якщо значення 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");

1
Або якщо немає ключа1 ..if (!("key1" in obj)) { console.log("no key1 in obj"); }
Хастіг Цюзамменстеллен

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

Примітка: Якщо ваш ключ дорівнює нулю або "" ваш "якщо" буде неправильним.

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

Отже, найкращий спосіб перевірити, чи існує ключ у obj:'a' in obj


1

Ви можете спробувати це:

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

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


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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.