Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How might one look at an object in JavaScript to find out what it is?

Note: I’m going to use a specific object as an example here, but please don’t post answers specific to this example; the question is more general.

Specific example

I wrote some jQuery code like this...

$('#some_button').click(function(event) {
    $.post('<some URL>', { <some parameters> },
        function() { <do something on success> })
        .error(function(x) {
            // What is x?
        });
    event.preventDefault();
});

Now, for the purpose of this question, let’s assume that there is no documentation about that object x that is passed in.

An obvious thing to do might be

alert(x);

but all that will output is [object Object].

General question

What might be an easy way to find out what properties/methods an unknown object has? I’m thinking something that I’d just write during the debugging phase, no production code of course.

You may assume that jQuery is available.

Edit:

I’m fully aware of for (...), but surely that doesn’t mean there can’t be a better/easier way — I thought jQuery might have something built-in...

like image 245
Timwi Avatar asked Jun 13 '11 11:06

Timwi


People also ask

How do you find out what type an object is JavaScript?

Use the typeof operator to get the type of an object or variable in JavaScript. The typeof operator also returns the object type created with the "new" keyword. As you can see in the above example, the typeof operator returns different types for a literal string and a string object.

How can you tell what object an object is in?

Log to the Console Arguably the easiest way to see what is inside an object is to log the object to the console. The console. log() statement lets you view all of the values in a JavaScript object. We can see the values in our object.

How do you check if a property is in an object JavaScript?

JavaScript provides you with three common ways to check if a property exists in an object: Use the hasOwnProperty() method. Use the in operator. Compare property with undefined .


3 Answers

A general and single level basic javascript solution

Basic functionality looks like this:

var s = "";
for(var p in obj)
{
    s += p + " = " + obj[p] + "\n";
}
alert(s);

Object graph issue

It will enumerate over all properties of an object. If this particular object has deep object trees you should better put this into a function and then recall it on sub object. enumerate internal sub object using the same technique. Arrays are a similar issue.

But I suppose you'll be able to provide this kind of functionality from this starting example code.

Browser console solution

If you have development console open in your browser (in Firefox that would be Firebug) then you can easily just call this:

console.log(obj);

But there's a problem with IE, because when it comes to a complex object is just displays {...} which isn't really helpful. So this approach can only be used in Chrome and Firefox+Firebug.

A jQuery plugin for any browser

This is a small and simple plugin I've come up to enumerate an arbitrary object and display its content in browser's console:

$.extend({
    inspect: function(obj,n){
        n = n || "this";
        if ($.isArray(obj)) {
            for (var x = 0; x < obj.length; x++) {
                $.inspect(obj[x], n + "[" + x + "]");
            }
            return;
        }
        if ($.isPlainObject(‌​obj)) {
            for (var p in obj){
                $.inspect(obj[p], n + "." + p);
            }
            return;
        }
        console.log(n + " = " + obj.toString());
    }
});

This code works with any browser (I actually needed it for IE, because of the previously mentioned issue with {...} display.

It parses an object graph into console provided that your browser's console is open. In IE and Chrome that's the built in development console and in Firefox it's Firebug console.

You can use it as:

$.inspect(yourObject);

or

$.inspect(yourObject, "person");

The second optional parameter is used to give your object a name when displaying it. If you don't provide the name it will be set as "this". Your object will be displayed as:

this.name = "John"
this.lastname = "Doe"
like image 100
Robert Koritnik Avatar answered Oct 03 '22 23:10

Robert Koritnik


console.log was built for that.

Alternatively (although I'm not sure what could be better than the first option) your own recursive implementation that loops through the objects properties with a simple for(parameter in obj){ ... }

like image 33
davin Avatar answered Oct 03 '22 22:10

davin


console.log

will usually give you a better idea of the properties an object has.

like image 26
Mick Hansen Avatar answered Oct 03 '22 22:10

Mick Hansen