Данный метод мы можем использовать для поиска ключа в объекте.

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

Ваши вопросы и комментарии:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *