JS de baunilha:
A resposta de @ evan parece melhor aqui. Basta (ab) usar JSON.parse / stringify para efetivamente fazer uma cópia do objeto.
console.log(JSON.parse(JSON.stringify(test)));
Solução específica JQuery:
Você pode criar um instantâneo de um objeto em um determinado momento com jQuery.extend
console.log($.extend({}, test));
O que realmente está acontecendo aqui é que o jQuery está criando um novo objeto com o test
conteúdo do objeto e registrando-o (para que não mude).
Solução específica AngularJS (1):
Angular fornece uma copy
função que pode ser usada para o mesmo efeito:angular.copy
console.log(angular.copy(test));
Função de wrapper Vanilla JS:
Aqui está uma função que envolve console.log
mas faz uma cópia de qualquer objeto antes de desconectá-lo.
Escrevi isso em resposta a algumas funções semelhantes, mas menos robustas, nas respostas. Ele suporta vários argumentos e não tentará copiar as coisas se elas não forem objetos regulares .
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))
}
exemplo de uso :consoleLogWithObjectCopy('obj', {foo: 'bar'}, 1, /abc/, {a: 1})