2009-10-26 16 views

Respuesta

294

Si está usando Firefox, alert(object.toSource()) debería ser suficiente para los propósitos de depuración simples.

+7

También es compatible con IE9 (si no antes), pero no con Chrome 17 o Safari 5. –

+12

¿Hay una forma de hacer algo similar entre navegadores? –

+47

En navegadores recientes, puede usar 'console.dir (object)' para volcar el contenido de un objeto a la consola de depuración (F12 en la mayoría de los navegadores). – rossipedia

8

Debería considerar usar FireBug para la depuración de JavaScript. Te permitirá interactivamente inspeccionar todas tus variables, e incluso pasar por las funciones.

7

Usar dir (objeto). O siempre puede descargar Firebug for Firefox (realmente útil).

+0

dir? ¿Necesitas incluir algún archivo js especial? – cometta

+0

solo necesita la extensión firebug –

+1

console.dir (object) Imprime la salida en el panel de la consola de Firebug. Devuelve "_firebugIgnore", por lo que no es para usar con alert(). Documentado en http://getfirebug.com/wiki/index.php/Console_API#console.dir.28object.29 –

2

También puede utilizar el método Prototype Object.inspect(), que "Devuelve la representación de cadena orientada a la depuración del objeto".

http://api.prototypejs.org/language/Object/inspect/

+2

Es bastante inútil para una biblioteca javascript llamarse a sí mismo después de un aspecto fundamental de un idioma. –

24

Si lo que desea es tener una representación de cadena de un objeto, se podría utilizar la función JSON.stringify, utilizando un JSON library.

+0

esta es la mejor respuesta en mi humilde opinión, funciona en todos los navegadores – cal

72

Además de utilizar un depurador, también puede acceder a todos los elementos de un objeto mediante un bucle foreach. La siguiente función printObject debe alert() su objeto que muestre todas las propiedades y valores respectivos.

function printObject(o) { 
    var out = ''; 
    for (var p in o) { 
    out += p + ': ' + o[p] + '\n'; 
    } 
    alert(out); 
} 

// now test it: 
var myObject = {'something': 1, 'other thing': 2}; 
printObject(myObject); 

El uso de una herramienta de inspección DOM es preferible porque le permite excavar bajo las propiedades que son los objetos mismos. Firefox tiene FireBug, pero todos los otros navegadores principales (IE, Chrome, Safari) también tienen herramientas de depuración incorporadas que debes verificar.

+5

Puede que quiera agregar if (o.hasOwnProperty (p)) dentro del ciclo –

+3

Es una buena idea, pero cuando depuro, prefiero verlo todo. Quizás incluso mejor sería algo como: for (var p in o) { if (! O.hasOwnProperty (p)) out + = '(inherited)'; out + = p + ':' + o [p] + '\ n'; } –

2

Puede dar a sus objetos sus propios métodos de String en sus prototipos.

587

Esto le dará muy agradable de salida con objeto JSON con sangría:

alert(JSON.stringify(YOUR_OBJECT_HERE, null, 4)); 

El segundo argumento altera el contenido de la cadena antes de devolverlo. El tercer argumento especifica cuántos espacios usar como espacio en blanco para legibilidad.

+32

+1 para soporte multiplataforma. Estandarizado en ECMAScript 5th Edition, con soporte en Firefox 3.6, Chrome (ver?), Safari 4 e IE8. FYI: El parámetro 4 es el número de espacios para cada nivel de indención. También puede ser una cadena, p. "\ t". El parámetro nulo es un marcador de posición para una función de filtrado, si desea limitar lo que se muestra. Ver: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/JSON/stringify –

+3

infinitamente útil en el depurador IE8 JS. –

+2

Usando esta respuesta :) +1 –

3

¡Javascript para todos!

String.prototype.repeat = function(num) { 
    if (num < 0) { 
     return ''; 
    } else { 
     return new Array(num + 1).join(this); 
    } 
}; 

function is_defined(x) { 
    return typeof x !== 'undefined'; 
} 

function is_object(x) { 
    return Object.prototype.toString.call(x) === "[object Object]"; 
} 

function is_array(x) { 
    return Object.prototype.toString.call(x) === "[object Array]"; 
} 

/** 
* Main. 
*/ 
function xlog(v, label) { 
    var tab = 0; 

    var rt = function() { 
     return ' '.repeat(tab); 
    }; 

    // Log Fn 
    var lg = function(x) { 
     // Limit 
     if (tab > 10) return '[...]'; 
     var r = ''; 
     if (!is_defined(x)) { 
      r = '[VAR: UNDEFINED]'; 
     } else if (x === '') { 
      r = '[VAR: EMPTY STRING]'; 
     } else if (is_array(x)) { 
      r = '[\n'; 
      tab++; 
      for (var k in x) { 
       r += rt() + k + ' : ' + lg(x[k]) + ',\n'; 
      } 
      tab--; 
      r += rt() + ']'; 
     } else if (is_object(x)) { 
      r = '{\n'; 
      tab++; 
      for (var k in x) { 
       r += rt() + k + ' : ' + lg(x[k]) + ',\n'; 
      } 
      tab--; 
      r += rt() + '}'; 
     } else { 
      r = x; 
     } 
     return r; 
    }; 

    // Space 
    document.write('\n\n'); 

    // Log 
    document.write('< ' + (is_defined(label) ? (label + ' ') : '') + Object.prototype.toString.call(v) + ' >\n' + lg(v)); 
}; 



// Demo // 

var o = { 
    'aaa' : 123, 
    'bbb' : 'zzzz', 
    'o' : { 
     'obj1' : 'val1', 
     'obj2' : 'val2', 
     'obj3' : [1, 3, 5, 6], 
     'obj4' : { 
      'a' : 'aaaa', 
      'b' : null 
     } 
    }, 
    'a' : [ 'asd', 123, false, true ], 
    'func' : function() { 
     alert('test'); 
    }, 
    'fff' : false, 
    't' : true, 
    'nnn' : null 
}; 

xlog(o, 'Object'); // With label 
xlog(o); // Without label 

xlog(['asd', 'bbb', 123, true], 'ARRAY Title!'); 

var no_definido; 
xlog(no_definido, 'Undefined!'); 

xlog(true); 

xlog('', 'Empty String'); 
1

Función simple para alertar el contenido de un objeto o una matriz.
Llamar a esta función con una matriz o cadena o un objeto que alerta el contenido.

Función

function print_r(printthis, returnoutput) { 
    var output = ''; 

    if($.isArray(printthis) || typeof(printthis) == 'object') { 
     for(var i in printthis) { 
      output += i + ' : ' + print_r(printthis[i], true) + '\n'; 
     } 
    }else { 
     output += printthis; 
    } 
    if(returnoutput && returnoutput == true) { 
     return output; 
    }else { 
     alert(output); 
    } 
} 

Uso

var data = [1, 2, 3, 4]; 
print_r(data); 
8

Se podría Nodo de util.inspect(object) para imprimir la estructura del objeto.

Es especialmente útil cuando su objeto tiene dependencias circulares, p.

$ node 

var obj = { 
    "name" : "John", 
    "surname" : "Doe" 
} 
obj.self_ref = obj; 

util = require("util"); 

var obj_str = util.inspect(obj); 
console.log(obj_str); 
// prints { name: 'John', surname: 'Doe', self_ref: [Circular] } 

Es ese caso JSON.stringify lanza una excepción: el contenido TypeError: Converting circular structure to JSON

12

impresión de objeto que se puede utilizar

console.log(obj_str); 

se puede ver el resultado en la consola como a continuación.

Object {description: "test"} 

Para la consola abierta presione F12 en el navegador chrome, encontrará la pestaña de la consola en el modo de depuración.

-3

Me enfrenté a un problema similar, el motivo fue que utilicé ajax para obtener datos. En este caso, hice dos llamadas ajax asincrónicas. En uno solo devuelvo el string msg y lo muestro en alerta. En la segunda llamada ajax, obtengo la lista de arrays en formato json y la decodifico en js. Entonces mi segunda solicitud se usa para procesar primero y me estaba alertando del objeto.

Tan solo revise. 1. alerta debe contener cadena. 2. Si obtienes arrayList o cualquier otro Object decodifícalo.

¡Todo lo mejor!

Cuestiones relacionadas