2

Is there something like Java's reflection where I can know what attributes are available?

4
  • 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. Commented Feb 16, 2011 at 17:43
  • Related question: stackoverflow.com/questions/208016/… Commented Feb 16, 2011 at 17:43
  • 1
    It's really an exact duplicate of that question. marked it as such. Commented Feb 16, 2011 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 ) Commented Feb 16, 2011 at 18:54

3 Answers 3

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/

Sign up to request clarification or add additional context in comments.

2 Comments

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)
all valid points, I am just starting him on the right direction
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;
}

Comments

1

A way to do it:

for(var attrib in myObject){    

 if(typeof attrib != 'function') {

     alert('this is attribute ' + attrib + 'with value' +  myObject[attrib]);    
 } }

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.