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