Vanilla JS:
La risposta di @ evan sembra la migliore qui. Basta (ab) usare JSON.parse / stringify per creare in modo efficace una copia dell'oggetto.
console.log(JSON.parse(JSON.stringify(test)));
Soluzione specifica di JQuery:
È possibile creare un'istantanea di un oggetto in un determinato momento con jQuery.extend
console.log($.extend({}, test));
Ciò che sta realmente accadendo qui è che jQuery sta creando un nuovo oggetto con il test
contenuto dell'oggetto e registrandolo (quindi non cambierà).
Soluzione specifica AngularJS (1):
Angular fornisce una copy
funzione che può essere utilizzata per lo stesso effetto:angular.copy
console.log(angular.copy(test));
Funzione wrapper Vanilla JS:
Ecco una funzione che avvolge console.log
ma farà una copia di tutti gli oggetti prima di disconnetterli.
Ho scritto questo in risposta ad alcune funzioni simili ma meno robuste nelle risposte. Supporta più argomenti e non proverà a copiare cose se non sono oggetti regolari .
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))
}
esempio di utilizzo :consoleLogWithObjectCopy('obj', {foo: 'bar'}, 1, /abc/, {a: 1})