Проверка наличия ключа в объекте 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 и обработать их?
Как удалить все дубликаты из массива объектов?
Самый эффективный способ группировки массивов объектов
Как перемешать (сделать случайным) массив в JavaScript?
Как объединить два массива в JavaScript и удалить дубликаты?