Is there something like Java's reflection where I can know what attributes are available?
3 Answers
for(var key in myObject) {
//do something with key
}
that enumerates through all properties
all properties for the window object http://jsfiddle.net/KdyLG/
2 Comments
Alexey Lebedev
Note 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)
Kris Ivanov
all valid points, I am just starting him on the right direction
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;
}
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 )