Vous pouvez cloner un tableau avec Array#slice
:
console.log(s); // ["bye"], i.e. incorrect
console.log(s.slice()); // ["hi"], i.e. correct
Une fonction que vous pouvez utiliser à la place de console.log
qui n'ont pas ce problème est comme suit:
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);
};
Pour le cas des objets, malheureusement, la meilleure méthode semble être de débogage d'abord avec un non-navigateur WebKit, ou d'écrire une fonction compliquée de clone. Si vous travaillez uniquement avec des objets simples, où l'ordre des touches n'est pas grave et il n'y a pas de fonctions, vous pouvez toujours le faire:
console.logSanitizedCopy = function () {
var args = Array.prototype.slice.call(arguments);
var sanitizedArgs = JSON.parse(JSON.stringify(args));
return console.log.apply(console, sanitizedArgs);
};
Toutes ces méthodes sont évidemment très lent, donc, plus encore qu'avec la normale console.log
s, vous avez à strip off après que vous avez terminé le débogage.