Проверка наличия в объекте
При динамическом определении в объекте новых свойств и методов перед их использованием бывает важно проверить, а есть ли уже такие методы и свойства. Для этого в javascript может использоваться оператор in
который имеет следующий синтаксис, в кавычках идет название свойства или метода, а после in
название объекта. Если свойство или метод с подобным именем имеется, то оператор возвращает true
. Если нет, возвращается false
:
"свойство|метод" in объект
Узнаем, есть ли в объекте ряд свойств:
const user = {};
user.name = "Tom";
user.age = 26;
user.print = function(){
console.log(this.name);
console.log(this.age);
};
const hasNameProp = "name" in user;
// true - свойство name есть в user
console.log(hasNameProp);
const hasWeightProp = "weight" in user;
// false - в user нет свойства или метода под названием weight
console.log(hasWeightProp);
С помощью выражения name in user
проверяем, есть ли в объекте user свойство name
и результат проверки передаем в константу hasNameProp
. Далее анологичным образом проверяем наличие свойства wheight
.
Подобным обпазом можно проверить и наличие методов:
const hasPrintMethod = "print" in user;
// true - в user есть метод print
console.log(hasPrintMethod);
Альтернативный способ заключается на значение undefined
. Если свойство или метод равен undefined
, то эти свойство или метод не определены:
const hasNameProp = user.name!==undefined;
// true
console.log(hasNameProp);
const hasWeightProp = user.weight!==undefined;
// false
console.log(hasWeightProp);
И так как объекты представляют тип Object
, а значит, имеет все его методы и свойства, то объекты также могут использовать метод hasOwnProperty()
, который определен в типе Object
:
const hasNameProp = user.hasOwnProperty("name");
// true
console.log(hasNameProp);
const hasPrintMethod = user.hasOwnProperty("print");
// true
console.log(hasPrintMethod);
const hasWeightProp = user.hasOwnProperty("weight");
// false
console.log(hasWeightProp);