Since hasOwnProperty has some caveats and quirks (window / extensive use in Internet Explorer 8 issues, etc.):
Is there any reason to even use it
The hasOwnProperty method checks that a property is assigned to the object directly.
So, if property 'a' is in the prototype, hasOwnProperty will filter that.
function NewClass() {}
NewClass.prototype = { a: 'there' };
var obj = new NewClass();
if (obj.hasOwnProperty('a')) { /* Code does not work */ }
if (obj.a !== undefined) { /* Code works */ }
So, hasOwnProperty is safer in many cases.