Итерация по свойствам требует этой дополнительной проверки hasOwnProperty
:
for (var property in object) {
if (object.hasOwnProperty(property)) {
// do stuff
}
}
Это необходимо, потому что прототип объекта содержит дополнительные свойства для объекта, которые являются технически частью объекта. Эти дополнительные свойства наследуются от класса базового объекта, но все еще являются свойствами object
.
hasOwnProperty
просто проверяет, является ли это свойством, специфичным для этого класса , а не один, унаследованный от базового класса.