Puede clonar una matriz con Array#slice
:
console.log(s); // ["bye"], i.e. incorrect
console.log(s.slice()); // ["hi"], i.e. correct
Una función que puede usar en lugar de console.log
que no tenga este problema es la siguiente:
console.logShallowCopy = function () {
function slicedIfArray(arg) {
return Array.isArray(arg) ? arg.slice() : arg;
}
var argsSnapshot = Array.prototype.map.call(arguments, slicedIfArray);
return console.log.apply(console, argsSnapshot);
};
Para el caso de los objetos, desafortunadamente, el mejor método parece ser depurar primero con un navegador que no sea WebKit, o escribir una función complicada para clonar. Si solo está trabajando con objetos simples, donde el orden de las teclas no importa y no hay funciones, siempre puede hacer lo siguiente:
console.logSanitizedCopy = function () {
var args = Array.prototype.slice.call(arguments);
var sanitizedArgs = JSON.parse(JSON.stringify(args));
return console.log.apply(console, sanitizedArgs);
};
Obviamente, todos estos métodos son muy lentos, por lo que incluso más que con los console.log
s normales , debe quitarlos después de que haya terminado la depuración.