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 se puede utilizar en lugar de console.log
que no tiene este problema es el 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);
};
Desafortunadamente, en el caso de los objetos, el mejor método parece ser depurar primero con un navegador que no sea WebKit, o escribir una función complicada para clonar. Si sólo se trabaja con objetos simples, donde el orden de las teclas no importa y no hay ninguna función, siempre se puede hacer:
console.logSanitizedCopy = function() {
var args = Array.prototype.slice.call(arguments);
var sanitizedArgs = JSON.parse(JSON.stringify(args));
return console.log.apply(console, sanitizedArgs);
};
Todos estos métodos son, evidentemente, muy lento, por lo que incluso más que con normal console.log
s, tienes que quitarlos después de que hayas terminado de depurar.
observo el mismo comportamiento en Safari, así que probablemente sea una cosa de webkit. Bastante sorprendente. Yo lo llamaría un error. – Lee
@mplungjan - eso no es verdad. la primera línea declara una matriz "simple antigua" con un solo elemento en el índice 0. La tercera línea simplemente asigna un nuevo valor a ese elemento. ambos casos están trabajando con una matriz indexada numéricamente simple. – Lee
si esto es un error, no entiendo por qué este error no fue encontrado y reparado. –