41

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

17

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

Если ключ не существует, и я попытаюсь получить к нему доступ, вернётся ли значение false? Или будет выброшена ошибка?

4 ответ(ов)

1

В вашем примере код вернет 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.

0

В выражении "key" in obj проверяется, имеется ли у объекта obj свойство с названием "key". Это означает, что проверка касается только значений атрибутов объекта, которые могут сильно отличаться от ключей массивов. В JavaScript атрибуты объектов и ключи массивов имеют разные семантики, поэтому стоит быть внимательным при использовании этого оператора. Например, если вы хотите проверить наличие ключа в массиве, лучше использовать методы, специфичные для массивов, такие как Array.prototype.includes() или Array.prototype.indexOf().

0

Вот три способа проверить, существует ли свойство в объекте JavaScript:

  1. !!obj.theProperty

    Этот способ преобразует значение в булевый тип. Метод вернёт true для всех значений, кроме false.

  2. 'theProperty' in obj

    Этот метод возвращает true, если свойство существует в объекте, независимо от его значения (даже если оно пустое).

  3. obj.hasOwnProperty('theProperty')

    Этот способ не проверяет цепочку прототипов. Так как все объекты имеют метод toString, методы 1 и 2 вернут true для него, тогда как 3 может вернуть false.

Ссылка:

http://book.mixu.net/node/ch5.html

0

Ответ:

if ("key" in myObj) {
    console.log("Ключ существует!");
} else {
    console.log("Ключ не существует!");
}

Объяснение:

Оператор in проверяет, существует ли ключ в объекте. Если вы проверите, равен ли его значение undefined: if (myObj["key"] === 'undefined'), то можете столкнуться с проблемами, так как ключ может существовать в вашем объекте с значением undefined.

По этой причине гораздо правильнее сначала использовать оператор in, а затем сравнить значение, которое находится по этому ключу, уже зная, что он существует.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь