trucos para log internet google errores consola con comandos chrome javascript debugging console logging clone

javascript - para - ¿Cómo puedo cambiar el comportamiento predeterminado de console.log en Safari?



javascript console chrome (11)

En Safari sin complementos, console.log mostrará el objeto en el último estado de ejecución, no en el estado en que se llamó a console.log .

Tengo que clonar el objeto solo para console.log a través de console.log para obtener el estado del objeto en esa línea.

Ejemplo:

var test = {a: true} console.log(test); // {a: false} test.a = false; console.log(test); // {a: false}


Vanilla JS:

La respuesta de @evan parece ser la mejor aquí. Simplemente (ab) use JSON.parse / stringify para hacer una copia efectiva del objeto.

console.log(JSON.parse(JSON.stringify(test)));

Solución específica de JQuery:

Puede crear una instantánea de un objeto en un momento determinado con jQuery.extend

console.log($.extend({}, test));

Lo que está sucediendo aquí es que jQuery está creando un nuevo objeto con el contenido del objeto de test y registrando eso (para que no cambie).

Solución específica AngularJS (1):

Angular proporciona una función de copy que se puede usar con el mismo efecto: angular.copy

console.log(angular.copy(test));

Función de envoltura Vanilla JS:

Aquí hay una función que envuelve console.log pero hará una copia de cualquier objeto antes de cerrar la sesión.

Escribí esto en respuesta a algunas funciones similares pero menos robustas en las respuestas. Admite múltiples argumentos, y no intentará copiar cosas si no son objetos regulares .

function consoleLogWithObjectCopy () { var args = [].slice.call(arguments); var argsWithObjectCopies = args.map(copyIfRegularObject) return console.log.apply(console, argsWithObjectCopies) } function copyIfRegularObject (o) { const isRegularObject = typeof o === ''object'' && !(o instanceof RegExp) return isRegularObject ? copyObject(o) : o } function copyObject (o) { return JSON.parse(JSON.stringify(o)) }

ejemplo de uso : consoleLogWithObjectCopy(''obj'', {foo: ''bar''}, 1, /abc/, {a: 1})


Creo que estás buscando console.dir() .

console.log() no hace lo que quiere porque imprime una referencia al objeto, y para cuando lo abre, se modifica. console.dir imprime un directorio de las propiedades en el objeto en el momento que lo llamas.

La siguiente idea de JSON es buena; incluso podría pasar a analizar la cadena JSON y obtener un objeto navegable como lo que .dir () le daría:

console.log(JSON.parse(JSON.stringify(obj)));


Definí una utilidad:

function MyLog(text) { console.log(JSON.stringify(text)); }

y cuando quiero iniciar sesión en la consola simplemente lo hago:

MyLog("hello console!");

¡Funciona muy bien!



Ese > Object en la consola, no solo muestra el estado actual. De hecho, está difiriendo la lectura del objeto y sus propiedades hasta que lo expandas.

Por ejemplo,

var test = {a: true} console.log(test); setTimeout(function () { test.a = false; console.log(test); }, 4000);

A continuación, expanda la primera llamada, será correcta, si lo hace antes de la segunda console.log regresa


Hay una opción para usar una biblioteca de depuración.

https://debugjs.net/

Simplemente incluya la secuencia de comandos en su página web y coloque las declaraciones de registro.

<script src="debug.js"></script>

Explotación florestal

var test = {a: true} log(test); // {a: true} test.a = false; log(test); // {a: false}


Lo que suelo hacer si quiero ver su estado en el momento en que se registró es simplemente convertirlo a una cadena JSON.

console.log(JSON.stringify(a));


Me pueden disparar por sugerir esto, pero esto puede ser llevado un paso más allá. Podemos extender directamente el objeto de la consola para que quede más claro.

console.logObject = function(o) { (JSON.stringify(o)); }

No sé si esto causará algún tipo de colisión de biblioteca / fusión nuclear / desgarro en el continuo del espacio-tiempo. Pero funciona maravillosamente en mis pruebas qUnit. :)


Simplemente actualice la página después de abrir la consola o abrir la consola antes de enviar la solicitud a la página de destino ....


Simplemente imprime todo el objeto en la consola.

console.dir(object);


usando la sugerencia de Xeon06, puedes analizar su JSON en un objeto, y aquí está la función de registro que ahora uso para volcar mis objetos:

function odump(o){ console.log($.parseJSON(JSON.stringify(o))); }