Как можно посмотреть на объект в JavaScript, чтобы узнать, что это такое? - PullRequest
5 голосов
/ 13 июня 2011

Примечание: Я собираюсь использовать конкретный объект в качестве примера здесь, но, пожалуйста, не публикуйте ответы, специфичные для этого примера;вопрос более общий.

Конкретный пример

Я написал такой код jQuery, как этот ...

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

Теперь, для целей этого вопроса, давайте предположим,что нет никакой документации об этом объекте x, который передается внутрь.

Очевидная вещь, которую нужно сделать, может быть

alert(x);

, но все, что будет выводиться, это [object Object].

Общий вопрос

Какой простой способ узнать, какими свойствами / методами обладает неизвестный объект?Я думаю кое-что, что я бы просто написал на этапе отладки, конечно, без производственного кода.

Вы можете предположить, что jQuery доступен.

Редактировать:

Я полностью осведомлен о for (...), но, конечно, это не значит, что не может быть лучшего / более легкого пути - я думал, что jQuery может иметь что-то встроенное ...

Ответы [ 6 ]

5 голосов
/ 13 июня 2011

Общее и одноуровневое базовое решение JavaScript

Базовая функциональность выглядит следующим образом:

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

Проблема с графом объекта

Перечисляет все свойства объекта,Если этот конкретный объект имеет глубокие деревья объектов, вам лучше поместить это в функцию, а затем вызвать ее для подобъекта.перечислить внутренний подобъект, используя ту же технику.Массивы - это похожая проблема.

Но я полагаю, что вы сможете предоставить такую ​​функциональность из этого исходного кода.

Решение консоли браузера

Если у вас естьКонсоль разработки откроется в вашем браузере (в Firefox это будет Firebug), тогда вы можете легко вызвать это так:

console.log(obj);

Но есть проблема с IE, потому что когда дело доходит до сложного объекта, просто отображается {...} что не очень полезно.Так что этот подход можно использовать только в Chrome и Firefox + Firebug.

Плагин jQuery для любого браузера

Это небольшой и простой плагин, который я придумал для перечисления произвольного объекта иотображать его содержимое в консоли браузера:

$.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());
    }
});

Этот код работает с любым браузером (он мне действительно нужен для IE, из-за ранее упомянутой проблемы с {...} display.

Он анализируетграф объектов в консоль при условии, что консоль вашего браузера открыта. В IE и Chrome это встроенная консоль разработки, а в Firefox - консоль Firebug.

Вы можете использовать ее как:

$.inspect(yourObject);

или

$.inspect(yourObject, "person");

Второй необязательный параметр используется для присвоения имени вашему объекту при его отображении. Если вы не укажете имя, оно будет установлено как "this". Ваш объект будет отображаться как:

this.name = "John"
this.lastname = "Doe"
2 голосов
/ 13 июня 2011

console.log был создан для этого.

В качестве альтернативы (хотя я не уверен, что может быть лучше, чем первый вариант) ваша собственная рекурсивная реализация, которая перебирает свойства объектов с помощью простого for(parameter in obj){ ... }

1 голос
/ 13 июня 2011

В javascript сложно написать общую функцию, чтобы определить, ссылается ли идентификатор на какой-либо конкретный тип значения.Большинство таких функций ограничены конкретными случаями.Общая функция «что это» практически невозможна, если не ограничена конкретными границами.

Если бы такая функция была доступна, что бы вы сделали с ней?

Общий подход в javascript:проверить свойства или возможности, необходимые для конкретной цели.Какой смысл идти дальше?

1 голос
/ 13 июня 2011

Лучше всего будет использовать браузер, такой как Google Chrome или Firefox, с плагином Firebug , тогда вы можете добавить точку останова и осмотреть объект. Если это простой объект Javascript, вы можете просто просмотреть свойства, как показано ниже:

for(name in object) { 
  alert("name: " + name + "value:" + object[name]);
}

Другим вариантом может быть сериализация в JSON и вывод его. Решение для этого можно найти здесь .

1 голос
/ 13 июня 2011
console.log

обычно дает вам лучшее представление о свойствах объекта.

0 голосов
/ 13 июня 2011

console.log и typeof obj будет достаточно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...