Виды и перебор свойств
Личные и наследуемые свойства
Объект имеет личные свойства, что мы ему указали при создании и/или добавили, обратившись к этому объекту непосредственно.
const fruit = {
weight: 50,
};
const banana = Object.create(fruit, {
name: { writable: true, configurable: true, value: 'banana' },
price: { writable: true, configurable: true, value: 30 },
});
console.log(banana);
// name & price - личные свойства объекта banana
// weight - наследуемое (доступное через прототип) свойство
Наследуемые свойства всегда доступны через прототип текущему объекту от родителя и предков, но ему лично они не добавлялись и не принадлежат.
Чтобы проверить, является ли какое-либо свойство личным для конкретного объекта, используется метод hasOwnProperty()
. Вызов этого метода на объекте, у которого мы проверяем личные свойства, вернет нам true, если указанный строчный ключ принадлежит указанному объекту лично, в противном случае (то есть этот ключ есть, но где-то в цепочке прототипов, а она может быть достаточно длинной) - вернет false.
banana.hasOwnProperty('name'); // true
banana.hasOwnProperty('price'); // true
banana.hasOwnProperty('weight'); // false
Перебор свойств
Для перебора используется цикл for...in. Он перебирает личные и наследуемые свойства через прототип, поэтому, если нас интересует перебор только личных свойств, нужно указывать условие с проверкой свойства с hasOwnProperty()
for (let prop in banana) {
console.log(prop); // покажет все три свойства: weight, name & price
if(banana.hasOwnProperty(prop)) {
console.log(prop); // покажет только личные свойства: name & price
}
}
Можно упростить работу с перебором свойств. используя методы конструктора Object, которые преобразуют в массив только личные свойства объекта, а с полученным массивом уже работать, как с обычным массивом, используя множество его методов и способов для перебора.
Object.keys()
Object.keys(obj)
принимает объект и возвращает массив ключей его собственных свойств. Если в объекте нет свойств, метод вернёт пустой массив.
Object.values()
Object.values(obj)
возвращает массив значений его собственных свойств. Если в объекте нет свойств, метод Object.values(obj)
вернёт пустой массив.
Object.entries()
Object.entries(obj)
возвращает массив записей, каждым элементом которого будет еще один массив из 2-х элементов: имени свойства и значения этого свойства из объекта obj
.
Last updated