Vanille JS:
La réponse de @ evan semble la meilleure ici. Il suffit (ab) d'utiliser JSON.parse / stringify pour créer efficacement une copie de l'objet.
console.log(JSON.parse(JSON.stringify(test)));
Solution spécifique à JQuery:
Vous pouvez créer un instantané d'un objet à un moment donné avec jQuery.extend
console.log($.extend({}, test));
Ce qui se passe réellement ici, c'est que jQuery crée un nouvel objet avec le test
contenu de objet et enregistre cela (pour qu'il ne change pas).
Solution spécifique AngularJS (1):
Angular fournit une copy
fonction qui peut être utilisée pour le même effet:angular.copy
console.log(angular.copy(test));
Fonction wrapper Vanilla JS:
Voici une fonction qui encapsule console.log
mais fera une copie de tous les objets avant de les déconnecter.
J'ai écrit ceci en réponse à quelques fonctions similaires mais moins robustes dans les réponses. Il prend en charge plusieurs arguments et n'essaiera pas de copier des choses si ce ne sont pas des objets normaux .
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))
}
exemple d'utilisation :consoleLogWithObjectCopy('obj', {foo: 'bar'}, 1, /abc/, {a: 1})