javascript - recorrer - object.values typescript
Cómo inspeccionar objetos Javascript (8)
¿Cómo puedo inspeccionar un objeto en un cuadro de alerta? Normalmente, alertar a un objeto solo arroja el nombre de nodo:
alert(document);
Pero quiero obtener las propiedades y métodos del objeto en el cuadro de alerta. ¿Cómo puedo lograr esta funcionalidad, si es posible? ¿O hay alguna otra sugerencia?
Particularmente, estoy buscando una solución para un entorno de producción donde console.log y Firebug no están disponibles.
¿Qué hay de alert(JSON.stringify(object))
con un navegador moderno?
En el caso de TypeError: Converting circular structure to JSON
, aquí hay más opciones: ¿Cómo serializar el nodo DOM a JSON incluso si hay referencias circulares?
La documentación: JSON.stringify()
proporciona información sobre formatear o embellecer el resultado.
Aquí está mi inspector de objetos que es más legible. Como el código tarda mucho en anotarse aquí, puede descargarlo en http://etto-aa-js.googlecode.com/svn/trunk/inspector.js
Use esto:
document.write(inspect(object));
Esto es una estafa flagrante de la excelente respuesta de Christian. Acabo de hacerlo un poco más legible:
/**
* 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
Hay algunos métodos:
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)
En un contexto de consola, a veces el .constructor o .prototype puede ser útil:
console.log(anObject.constructor );
console.log(anObject.prototype ) ;
Los bucles for
- in
para cada propiedad en un objeto o matriz. Puede usar esta propiedad para obtener el valor y cambiarlo.
Nota: Las propiedades privadas no están disponibles para inspección, a menos que use un "espía"; básicamente, anulas el objeto y escribes un código que crea un bucle for-in dentro del contexto del objeto.
Para en se ve como:
for (var property in object) loop();
Algunos ejemplos de código:
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));
Editar: Hace un tiempo, escribí mi propio inspector, si está interesado, me complace compartirlo.
Editar 2: Bueno, escribí uno de todos modos.
Usa tu consola:
console.log(object);
Use console.dir(object)
y el plugin Firebug
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);