Você pode clonar uma matriz com Array#slice
:
console.log(s); // ["bye"], i.e. incorrect
console.log(s.slice()); // ["hi"], i.e. correct
Uma função que você pode usar em vez de console.log
não ter esse problema é a seguinte:
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);
};
Infelizmente, para o caso de objetos, o melhor método parece ser depurar primeiro com um navegador que não seja o WebKit ou escrever uma função complicada para clonar. Se você estiver trabalhando apenas com objetos simples, onde a ordem das chaves não importa e não há funções, você sempre pode:
console.logSanitizedCopy = function () {
var args = Array.prototype.slice.call(arguments);
var sanitizedArgs = JSON.parse(JSON.stringify(args));
return console.log.apply(console, sanitizedArgs);
};
Todos esses métodos são obviamente muito lentos; portanto, mais do que com os console.log
s normais , você precisa removê-los depois de concluir a depuração.