Данный метод мы можем использовать для поиска ключа в объекте.
Допустим у нас есть объект и мы хотим проверить есть ли в нем заданный ключ. Мы могли бы воспользоваться перебором объекта в цикле, но если нам нужно просто получить true или false, то гораздо проще будет использовать метод hasOwnProperty()
const someObj = {
'key1': 'value 1',
'key2': 'value 2',
'key3': 'value 3',
'key4': 'value 4',
}
console.log(someObj.hasOwnProperty('key1')); // true
console.log(someObj.hasOwnProperty('key11')); // false
Кроме того, данный метод будет необходим, если вы проходитесь по объекту в цикле for ... in, так как данный цикл проходит и по прототипу объекта.
Давайте рассмотрим такой пример. У нас есть объект product, у него есть 3 свойства. Далее есть объект anotherProduct, у него есть свои 3 свойства, а также он наследует свойства из объекта product:
const product = {
size: 'M',
width: 100,
height: 150
}
for (let key in product) {
console.log(`${key} - ${product[key]}`);
}
// Выведет:
// size - M
// width - 100
// height - 150
const anotherProduct = {
sleeve: true,
color: 'red',
weight: 100,
__proto__: product
}
for (let key in anotherProduct) {
console.log(`${key} - ${anotherProduct[key]}`);
}
// Выведет все свойства, включая прототип:
// sleeve: true
// color: red
// weight: 100
// size - M
// width - 100
// height - 150
Проходя циклом по данным объектам выведем их в консоль. Так вот в первом случае мы в консоли увидим 3 свойства, а во втором 6.
В случае, если вам не нужны свойства прототипа, вы можете использовать метод hasOwnProperty, который проверит принадлежит ли данной свойство итерируемому объекту или его прототипу:
for (let key in anotherProduct) {
if (anotherProduct.hasOwnProperty(key))
console.log(`${key} - ${anotherProduct[key]}`);
}
// Выведет только:
// sleeve: true
// color: red
// weight: 100
Добавить комментарий