Как проверить объекты Javascript
Как я могу проверить объект в окне предупреждения? Обычно оповещение объекта просто выбрасывает nodename:
alert(document);
но я хочу, чтобы получить свойства и методы объекта в окне предупреждения. Как я могу достичь этой функциональности, если это возможно? Или есть другие предложения?
в частности, я ищу решение для рабочей среды, где консоли.бревно и поджигатель не доступны.
8 ответов:
The
for
-in
циклы для каждого свойства в объекте или массиве. Вы можете использовать это свойство, чтобы получить значение, а также изменить его.Примечание: частные свойства недоступны для проверки, если вы не используете "шпион"; в основном, вы переопределяете объект и пишете некоторый код, который выполняет цикл for-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));
Edit: некоторое время назад я написал своему инспектору, если вам интересно, я с удовольствием поделюсь.
Edit 2: Ну, я написал один в любом случае.
как о
alert(JSON.stringify(object))
с современным браузером?В случае
TypeError: Converting circular structure to JSON
, вот несколько вариантов: как сериализовать узел DOM в JSON, даже если есть циклические ссылки?документация:
JSON.stringify()
предоставляет информацию о форматировании или prettifying выход.
есть несколько способов :
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)
в консольном контексте, иногда .конструктор или. прототип может быть полезным:
console.log(anObject.constructor ); console.log(anObject.prototype ) ;
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);
Это вопиющий грабеж превосходного ответа Кристиана. Я просто сделал его немного более читаемым:
/** * 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
вот мой инспектор объектов, который более читаем. Потому что код занимает много времени, чтобы записать здесь вы можете скачать его на http://etto-aa-js.googlecode.com/svn/trunk/inspector.js
использовать такой :
document.write(inspect(object));