Как уже говорили другие, расширение Object.prototype
может не быть хорошей идеей, если ваш код должен хорошо играть с кодом, написанным людьми, не знающими hasOwnProperty()
.
В любом случае, я знаю три «правильных» способа проверить, доступно ли свойство:
obj.hasOwnProperty(name)
проверяет, существует ли свойство с данным именем в объекте.
name in obj
дополнительно включает свойства, унаследованные через цепочку прототипов объекта.
typeof obj[name] !== 'undefined'
дополнительно оценивает false
, если свойство присутствует, но было установлено на undefined
.
Некоторые объекты не-JS (например, window.external
в IE) могут не реализовывать hasOwnProperty()
, поэтому необходимо использовать одну из других проверок.