Is there something like Java's reflection where I can know what attributes are available?
Asked
Active
Viewed 506 times
2
-
Do you mean from a dev perspective, or do you need it to check for some kind of logic? If you just want to monitor an object that you're debugging (or whatever), you can log it in the console and (a good browser) will let you see how the object is laid out. – treeface Feb 16 '11 at 17:43
-
Related question: http://stackoverflow.com/questions/208016/how-to-list-the-properties-of-a-javascript-object – Shawn Chin Feb 16 '11 at 17:43
-
1It's really an exact duplicate of that question. marked it as such. – Adam Crossland Feb 16 '11 at 17:46
-
I was trying to serialize an objecto to JSON using stringify, but I've got some error ( something like no such property `OOO.toJSON()` ) I was trying to get the attributes to know where that 000 came from ( this is a very large existing object. Your suggestion worked well, but it turns out my environment is using some sort of javascript engine for java ( Rhino perhaps ) and I can't modify / instrospect some objects this way. Voting to close as exact duplicate too ( for some reason I didn't found that question before ) – OscarRyz Feb 16 '11 at 18:54
3 Answers
2
for(var key in myObject) {
//do something with key
}
that enumerates through all properties
all properties for the window
object http://jsfiddle.net/KdyLG/

Kris Ivanov
- 10,476
- 1
- 24
- 35
-
1Note that objects may have properties that cannot be iterated. An example is Math object. While you can access it's properties directly, e.g Math.sin, you won't be able to iterate through them using for..in. Another thing to keep in mind is that you're not only iterating through object's own properties, but through those up the prototype chain too. If this behavior is not desired you can check for myobj.hasOwnProperty(key) – Alexey Lebedev Feb 16 '11 at 17:53
-
1
This is one function that I use. You can specify which level of the array you which to dump.
alert(dump(myArray));
function dump(arr,level) {
var dumped_text = "";
if(!level) level = 0;
//The padding given at the beginning of the line.
var level_padding = "";
for(var j=0;j<level+1;j++) level_padding += " ";
if(typeof(arr) == 'object') { //Array/Hashes/Objects
for(var item in arr) {
var value = arr[item];
if(typeof(value) == 'object') { //If it is an array,
dumped_text += level_padding + "'" + item + "' ...\n";
dumped_text += dump(value,level+1);
} else {
dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n";
}
}
} else { //Stings/Chars/Numbers etc.
dumped_text = "===>"+arr+"<===("+typeof(arr)+")";
}
return dumped_text;
}

Dutchie432
- 28,798
- 20
- 92
- 109
1
A way to do it:
for(var attrib in myObject){
if(typeof attrib != 'function') {
alert('this is attribute ' + attrib + 'with value' + myObject[attrib]);
} }

Andreas
- 5,305
- 4
- 41
- 60