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

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

var user = {};
user.name = "Tom";
user.age = 26;
user.display = function(){
	
	console.log(user.name);
	console.log(user.age);
};
var hasNameProp = "name" in user;
console.log(hasNameProp); // true - свойство name есть в user
var hasWeightProp = "weight" in user;
console.log(hasWeightProp); // false - в user нет свойства или метода под названием weight
Output

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

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

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

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

var hasNameProp = user.hasOwnProperty('name');
console.log(hasNameProp); // true
var hasDisplayProp = user.hasOwnProperty('display');
console.log(hasDisplayProp); // true
var hasWeightProp = user.hasOwnProperty('weight');
console.log(hasWeightProp); // false

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

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

var user = {};
user.name = "Tom";
user.age = 26;
user.display = function(){
	
	console.log(user.name);
	console.log(user.age);
};
for(var key in user) {
	console.log(key + " : " + user[key]);
}

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


name : Tom
age : 26
display : function (){
	
	console.log(user.name);
	console.log(user.age);
}