Проверка наличия в объекте
При динамическом определении в объекте новых свойств и методов перед их использованием бывает важно проверить, а есть ли уже такие методы и свойства. Для этого в 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);