Ванільний JS:
Тут найкраще виглядає відповідь @ evan . Просто (ab) використовуйте JSON.parse / stringify, щоб ефективно зробити копію об'єкта.
console.log(JSON.parse(JSON.stringify(test)));
Специфічне рішення JQuery:
Ви можете створити знімок об’єкта в певний момент за допомогою jQuery.extend
console.log($.extend({}, test));
Що насправді відбувається тут, це jQuery - це створити новий об'єкт із test
вмістом об'єкта, і записати його (щоб він не змінився).
Специфічне рішення AngularJS (1):
Кутовий забезпечує 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})