Вот короткий и точный ответ:
В javascript каждый объект имеет набор встроенных пар ключ-значение, которые имеют метаинформацию об объекте.Когда вы перебираете все пары ключ-значение, используя for...in
construct / loop для объекта, вы перебираете и эти пары ключ-значение метаинформации (что вам определенно не нужно).
Использование hasOwnPropery(property)
отфильтровывания этих ненужных циклов метаинформации и прямой проверки того, что параметр property
является заданным пользователем свойством вобъект или нет.Под отфильтровыванием я имею в виду, что hasOwnProperty(property)
не выглядит, если в цепочке прототипов Object существует property
, то есть метаинформация.
Возвращает логическое значение true/false
на основечто.
Вот пример:
var fruitObject = {"name": "Apple", "shape": "round", "taste": "sweet"};
console.log(fruitObject.hasOwnProperty("name")); //true
console.log(Object.prototype.hasOwnProperty("toString");) //true because in above snapshot you can see, that there is a function toString in meta-information
Надеюсь, все ясно!