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