Краткое описание: в этом уроке вы узнаете, как проверить, существует ли свойство в объекте.
JavaScript предоставляет вам три распространенных способа проверки наличия свойства в объекте:
- Использовать метод
hasOwnProperty()
. - Использовать оператор
in
. - Сравните свойство с
undefined
.
Используйте метод hasOwnProperty().
В JavaScript Object.prototype
есть метод hasOwnProperty()
, который возвращает true
, если свойство существует в объекте:
Code language: JavaScript (javascript)let result = targetObject.hasOwnProperty(propertyName);
В следующем примере объявляется объект person
:
Code language: JavaScript (javascript)let person = { firstName: 'John', lastName: 'Doe' };
А следующий пример использует метод hasOwnProperty()
, чтобы проверить, существует ли свойство firstName
в объекте person
:
Code language: JavaScript (javascript)let result = person.hasOwnProperty('firstName'); console.log(result); // true
Однако свойство age
не существует в объекте person, поэтому следующий код возвращает false
:
Code language: JavaScript (javascript)let result = person.hasOwnProperty('age'); console.log(result); // false
Обратите внимание, что hasOwnProperty()
ищет свойство в собственных свойствах объекта.
Например, все объекты наследуют свойство toString
объекта Object
, метод hasOwnProperty() не обнаруживает его как свойство:
Code language: JavaScript (javascript)let result = person.hasOwnProperty('toString'); console.log(result); // false
Используйте оператор in
Оператор in
возвращает true
, если свойство существует в объекте. Если свойство не существует в объекте, он возвращает false
.
propertyName in targetObject
В следующем примере используется оператор in
для проверки наличия свойств firstName
и age
в объекте person
:
Code language: JavaScript (javascript)let person = { firstName: 'John', lastName: 'Doe' }; let result = 'firstName' in person; console.log(result); // true result = 'age' in person; console.log(result); // false
В отличие от метода hasOwnProperty()
, оператор in
ищет свойство как в собственных, так и в унаследованных свойствах объекта.
В следующем примере оператор in
используется для проверки наличия свойства toString
в объекте person
. Он возвращает true
, потому что toString
является наследуемым свойством объекта person
.
Code language: JavaScript (javascript)let person = { firstName: 'John', lastName: 'Doe' }; let result = 'toString' in person; console.log(result); // true
Сравнение свойства с undefined
Когда вы обращаетесь к несуществующему свойству объекта, вы получите undefined
. Поэтому вы можете сравнить свойство с undefined
, чтобы проверить, существует ли свойство в объекте:
Code language: JavaScript (javascript)let person = { firstName: 'John', lastName: 'Doe' }; let result = person.firstName !== undefined; console.log(result); // true
Если у объекта есть свойство, значение которого undefined
, то сравнение свойства с undefined
вернет неверный результат. Например:
Code language: JavaScript (javascript)let person = { firstName: 'John', lastName: 'Doe', age: undefined }; let result = person.age !== undefined; console.log(result); // false
В этом примере свойство age
действительно существует в объекте person
. Однако его начальное значение undefined
. Поэтому сравнение person.age
с undefined
возвращает false
, что не ожидается.
Резюме
- Используйте метод
hasOwnProperty()
, чтобы проверить, существует ли свойство в собственных свойствах объекта. - Используйте оператор
in
для проверки наличия свойства как в собственных, так и в унаследованных свойствах объекта. - Сравните свойство с
undefined
, чтобы проверить, существует ли свойство, только если вы уверены, что начальное значение свойства неundefined
.