Как проверить объекты Javascript
Как я могу проверить объект в окне предупреждения? Обычно оповещение объекта просто вызывает имя узла:
alert(document);
Но я хочу получить свойства и методы объекта в поле предупреждения. Как я могу достичь этой функциональности, если это возможно? Или есть другие предложения?
В частности, я ищу решение для производственной среды, где console.log и Firebug недоступны.
Ответы
Ответ 1
Циклы for
- in
для каждого свойства в объекте или массиве. Вы можете использовать это свойство, чтобы получить значение, а также изменить его.
Примечание. Частные свойства недоступны для проверки, если вы не используете "шпион"; в основном, вы переопределяете объект и записываете некоторый код, который выполняет цикл in-in внутри контекста объекта.
Для выглядит так:
for (var property in object) loop();
Пример кода:
function xinspect(o,i){
if(typeof i=='undefined')i='';
if(i.length>50)return '[MAX ITERATIONS]';
var r=[];
for(var p in o){
var t=typeof o[p];
r.push(i+'"'+p+'" ('+t+') => '+(t=='object' ? 'object:'+xinspect(o[p],i+' ') : o[p]+''));
}
return r.join(i+'\n');
}
// example of use:
alert(xinspect(document));
Изменить: Некоторое время назад я написал своего собственного инспектора, если вам интересно, я рад поделиться.
Изменить 2: Ну, я все равно написал.
Ответ 2
Как насчет alert(JSON.stringify(object))
с современным браузером?
В случае TypeError: Converting circular structure to JSON
здесь больше опций: Как сериализовать DOM node в JSON, даже если есть круговые ссылки?
Документация: JSON.stringify()
содержит информацию о форматировании или отключении вывода.
Ответ 3
Используйте console.dir(object)
и плагин Firebug
Ответ 4
Используйте консоль:
console.log(object);
Ответ 5
Существует несколько методов:
1. typeof tells you which one of the 6 javascript types is the object.
2. instanceof tells you if the object is an instance of another object.
3. List properties with for(var k in obj)
4. Object.getOwnPropertyNames( anObjectToInspect )
5. Object.getPrototypeOf( anObject )
6. anObject.hasOwnProperty(aProperty)
В контексте консоли иногда может быть полезен .constructor или .prototype:
console.log(anObject.constructor );
console.log(anObject.prototype ) ;
Ответ 6
var str = "";
for(var k in obj)
if (obj.hasOwnProperty(k)) //omit this test if you want to see built-in properties
str += k + " = " + obj[k] + "\n";
alert(str);
Ответ 7
Это откровенный отрыв от христианского отличного ответа. Я только что сделал это более читаемым:
/**
* objectInspector digs through a Javascript object
* to display all its properties
*
* @param object - a Javascript object to inspect
* @param result - a string of properties with datatypes
*
* @return result - the concatenated description of all object properties
*/
function objectInspector(object, result) {
if (typeof object != "object")
return "Invalid object";
if (typeof result == "undefined")
result = '';
if (result.length > 50)
return "[RECURSION TOO DEEP. ABORTING.]";
var rows = [];
for (var property in object) {
var datatype = typeof object[property];
var tempDescription = result+'"'+property+'"';
tempDescription += ' ('+datatype+') => ';
if (datatype == "object")
tempDescription += 'object: '+objectInspector(object[property],result+' ');
else
tempDescription += object[property];
rows.push(tempDescription);
}//Close for
return rows.join(result+"\n");
}//End objectInspector
Ответ 8
Вот мой инспектор объектов, который более читабельен. Поскольку код занимает много времени, чтобы записать его здесь, вы можете скачать его на http://etto-aa-js.googlecode.com/svn/trunk/inspector.js
Используйте это:
document.write(inspect(object));