Проверка наличия и перебор методов и свойств

Последнее обновление: 24.07.2021

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

"свойство|метод" in объект

в кавычках идет название свойства или метода, а после in - название объекта. Если свойство или метод с подобным именем имеется, то оператор возвращает true. Если нет - то возвращается false.

Например, узнаем, есть ли в объекте ряд свойств:

const user = {};
user.name = "Tom";
user.age = 26;
user.print = function(){
	
	console.log(this.name);
	console.log(this.age);
};
const hasNameProp = "name" in user;
console.log(hasNameProp); // true - свойство name есть в user

const hasWeightProp = "weight" in user;
console.log(hasWeightProp); // false - в user нет свойства или метода под названием weight

С помощью выражения "name" in user проверяем, есть ли в объекте user свойство "name" и результат проверки передаем в константу hasNameProp. Далее анологичным образом проверяем наличие свойства wheight.

Подобным обпазом можно проверить и наличие методов:

const hasPrintMethod = "print" in user;
console.log(hasPrintMethod); // true - в user есть метод print

Альтернативный способ заключается на значение undefined. Если свойство или метод равен undefined, то эти свойство или метод не определены:

const hasNameProp = user.name!==undefined;
console.log(hasNameProp); // true
const hasWeightProp = user.weight!==undefined;
console.log(hasWeightProp); // false

И так как объекты представляют тип Object, а значит, имеет все его методы и свойства, то объекты также могут использовать метод hasOwnProperty(), который определен в типе Object:

const hasNameProp = user.hasOwnProperty("name");
console.log(hasNameProp); // true
const hasPrintMethod = user.hasOwnProperty("print");
console.log(hasPrintMethod); // true
const hasWeightProp = user.hasOwnProperty("weight");
console.log(hasWeightProp); // false

Перебор свойств и методов

С помощью цикла for мы можем перебрать объект как обычный массив и получить все его свойства и методы и их значения:

const user = {
	name: "Tom",
	age: 26,
	print(){
     
		console.log(this.name);
		console.log(this.age);
	}
};

for(const prop in user) {
    console.log(prop, " : ", user[prop]);
}

И при запуске консоль браузера отобразит следующий вывод:

name : Tom
age : 26
print : print(){
	
	console.log(this.name);
	console.log(this.age);
}

Object.keys()

Функция Object.keys() позволяет получить названия всех свойств объекта. Соответственно можно перебрать этот набор и получить значения свойств:

const user = {
	name: "Tom",
	age: 26,
	print(){
     
		console.log(this.name);
		console.log(this.age);
	}
};

for(const prop of Object.keys(user)) {
    const value = user[prop];	// получаем по названию значение свойства
	console.log(prop,value);
}
Помощь сайту
WebMoney
  • P378451176208
  • Z280152397659
ЮMoney/Яндекс-Деньги
  • 410011174743222
PayPal
  • metanit22@mail.ru
Перевод на карту
  • Номер карты: 4048415020898850