I ran into some jquery code which attempts to use hasOwnProperty to access an html attribute.
<input type="text" name="fname" placeholder="First name">
<script>
var e = $element.find('input')[0];
if(!e.hasOwnProperty("placeholder")){...}
</script>
To my understanding, this should always be
if(!e.hasAttribute("placeholder")){...}
but what is the difference between hasAttribute and hasOwnProperty? Are they ever equivalent?
In general, hasOwnProperty() is the right choice most of the time, because you avoid issues with special keys, like constructor . A good rule of thumb is that if you're looking to see whether an object has a property, you should use hasOwnProperty() .
The hasOwnProperty() method returns true if the specified property is a direct property of the object — even if the value is null or undefined . The method returns false if the property is inherited, or has not been declared at all.
The hasAttribute() returns a Boolean value that indicates if the element has the specified attribute. If the element contains an attribute, the hasAttribute() returns true; otherwise, it returns false .
hasAttribute()
hasAttribute()
works only for html elements and returns true if that element has the same attribute name as the given argument.
<div class="myClass"></div>
<script>
document.querySelector('div').hasAttribute('class'); //true
document.querySelector('div').hasOwnProperty('class'); //false
</script>
hasOwnProperty()
hasOwnProperty()
works only for JavaScript objects and returns true if that object has a property with the same name as the given argument.
var obj = {
myProp: "my attribute"
}
obj.hasOwnProperty("myProp") //true
obj.hasAttribute("myProp") //false
Some html elements can be constructed inside javascript, thats why hasOwnProperty works sometimes for it, but hasAttribute never works for javascript objects.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With