Проверка наличия ключа в объекте JavaScript?
Как проверить, существует ли определённый ключ в объекте или массиве JavaScript?
Если ключ не существует, и я попытаюсь получить к нему доступ, вернётся ли значение false? Или будет выброшена ошибка?
4 ответ(ов)
В вашем примере код вернет undefined, если свойство отсутствует в объекте.
var aa = {hello: "world"};
alert( aa["hello"] );      // всплывающее окно с "world"
alert( aa["goodbye"] );    // всплывающее окно с "undefined"
undefined — это специальное константное значение. Вы можете использовать его, например, так:
// обратите внимание на три равных знака, чтобы null не равнялся undefined
if( aa["goodbye"] === undefined ) {
    // выполните что-то
}
Это, вероятно, лучший способ проверки отсутствующих ключей. Однако, как упоминается в комментарии ниже, теоретически может возникнуть необходимость, чтобы фактическое значение было undefined. Лично я никогда не сталкивался с такой ситуацией и не могу сейчас придумать причины, по которой бы мне это понадобилось, но для полноты картины вы можете использовать оператор in:
// это сработает, даже если у вас есть {"goodbye": undefined}
if( "goodbye" in aa ) {
    // выполните что-то
}
Таким образом, подход с использованием in позволяет вам проверить наличие свойства в объекте, даже если его значение равно undefined.
В выражении "key" in obj проверяется, имеется ли у объекта obj свойство с названием "key". Это означает, что проверка касается только значений атрибутов объекта, которые могут сильно отличаться от ключей массивов. В JavaScript атрибуты объектов и ключи массивов имеют разные семантики, поэтому стоит быть внимательным при использовании этого оператора. Например, если вы хотите проверить наличие ключа в массиве, лучше использовать методы, специфичные для массивов, такие как Array.prototype.includes() или Array.prototype.indexOf().
Вот три способа проверить, существует ли свойство в объекте JavaScript:
- !!obj.theProperty- Этот способ преобразует значение в булевый тип. Метод вернёт - trueдля всех значений, кроме- false.
- 'theProperty' in obj- Этот метод возвращает - true, если свойство существует в объекте, независимо от его значения (даже если оно пустое).
- obj.hasOwnProperty('theProperty')- Этот способ не проверяет цепочку прототипов. Так как все объекты имеют метод - toString, методы 1 и 2 вернут- trueдля него, тогда как 3 может вернуть- false.
Ссылка:
Ответ:
if ("key" in myObj) {
    console.log("Ключ существует!");
} else {
    console.log("Ключ не существует!");
}
Объяснение:
Оператор in проверяет, существует ли ключ в объекте. Если вы проверите, равен ли его значение undefined: if (myObj["key"] === 'undefined'), то можете столкнуться с проблемами, так как ключ может существовать в вашем объекте с значением undefined.
По этой причине гораздо правильнее сначала использовать оператор in, а затем сравнить значение, которое находится по этому ключу, уже зная, что он существует.
Как получить доступ к вложенным объектам, массивам или JSON и обработать их?
Как удалить все дубликаты из массива объектов?
Самый эффективный способ группировки массивов объектов
Наиболее эффективный способ преобразовать HTMLCollection в массив
Как преобразовать массив в объект?