Tuesday 24 October 2017

How do I enumerate the properties of a JavaScript object?

style="font-weight: bold;">

Answer



style="font-weight: bold;">

Answer






How do I enumerate the
properties of a JavaScript object?




I
actually want to list all the defined variables and their values, but I've learned that
defining a variable actually creates a property of the window
object.



Answer




Simple
enough:



for(var propertyName in
myObject) {
// propertyName is what you want
// you can get the
value like this:
myObject[propertyName]
}



Now,
you will not get private variables this way because they are not
available.



/>

EDIT: href="https://stackoverflow.com/questions/85992/how-do-i-enumerate-the-properties-of-a-javascript-object#86306">@bitwiseplatypus
is correct that unless you use the hasOwnProperty() method, you
will get properties that are inherited - however, I don't know why anyone familiar with
object-oriented programming would expect anything less! Typically, someone that brings
this up has been subjected to Douglas Crockford's warnings about this, which still
confuse me a bit. Again, inheritance is a normal part of OO languages and is therefore
part of JavaScript, notwithstanding it being
prototypical.



Now, that said,
hasOwnProperty() is useful for filtering,
but we don't need to sound a warning as if there is something dangerous in getting
inherited properties.



EDIT 2: href="https://stackoverflow.com/questions/85992/how-do-i-enumerate-the-properties-of-a-javascript-object#86306">@bitwiseplatypus
brings up the situation that would occur should someone add properties/methods to your
objects at a point in time later than when you originally wrote your objects (via its
prototype) - while it is true that this might cause unexpected behavior, I personally
don't see that as my problem entirely. Just a matter of opinion. Besides, what if I
design things in such a way that I use prototypes during the construction of my objects
and yet have code that iterates over the properties of the object and I want all
inherited properties? I wouldn't use hasOwnProperty(). Then,
let's say, someone adds new properties later. Is that my fault if things behave badly at
that point? I don't think so. I think this is why jQuery, as an example, has specified
ways of extending how it works (via jQuery.extend and
jQuery.fn.extend).




No comments:

Post a Comment

php - file_get_contents shows unexpected output while reading a file

I want to output an inline jpg image as a base64 encoded string, however when I do this : $contents = file_get_contents($filename); print &q...