Ваниль JS:
@ Эван ответ здесь кажется лучшим. Просто (ab) используйте JSON.parse / stringify, чтобы эффективно сделать копию объекта.
console.log(JSON.parse(JSON.stringify(test)));
JQuery конкретное решение:
Вы можете создать снимок объекта в определенный момент времени с помощью jQuery.extend
console.log($.extend({}, test));
Здесь на самом деле происходит то, что jQuery создает новый объект с test
содержимым объекта и регистрирует его (так что он не изменится).
AngularJS (1) конкретное решение:
Angular предоставляет copy
функцию, которую можно использовать для того же эффекта:angular.copy
console.log(angular.copy(test));
Функция обертки Vanilla JS:
Вот функция, которая оборачивает, console.log
но сделает копию любых объектов перед выходом их из системы.
Я написал это в ответ на несколько похожих, но менее надежных функций в ответах. Он поддерживает несколько аргументов и не будет пытаться копировать вещи, если они не являются обычными объектами.
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))
}
пример использования :consoleLogWithObjectCopy('obj', {foo: 'bar'}, 1, /abc/, {a: 1})