Vanilla JS:
La respuesta de @evan parece mejor aquí. Simplemente (ab) use JSON.parse / stringify para hacer efectivamente una copia del objeto.
console.log(JSON.parse(JSON.stringify(test)));
Solución específica de JQuery:
Puede crear una instantánea de un objeto en un momento determinado con jQuery.extend
console.log($.extend({}, test));
Lo que realmente está sucediendo aquí es que jQuery está creando un nuevo objeto con el test
contenido del objeto y lo está registrando (para que no cambie).
AngularJS (1) solución específica:
Angular proporciona una copy
función que puede usarse para el mismo efecto:angular.copy
console.log(angular.copy(test));
Función de envoltura Vanilla JS:
Aquí hay una función que se ajusta console.log
pero hará una copia de cualquier objeto antes de cerrar la sesión.
Escribí esto en respuesta a algunas funciones similares pero menos robustas en las respuestas. Admite múltiples argumentos, y no intentará copiar cosas si no son objetos normales .
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))
}
ejemplo de uso :consoleLogWithObjectCopy('obj', {foo: 'bar'}, 1, /abc/, {a: 1})