Vanilla JS:
Odpowiedź @ evan wydaje się tutaj najlepsza. Po prostu (ab) użyj JSON.parse / stringify, aby efektywnie skopiować obiekt.
console.log(JSON.parse(JSON.stringify(test)));
Rozwiązanie specyficzne dla JQuery:
Możesz utworzyć migawkę obiektu w określonym momencie za pomocą jQuery.extend
console.log($.extend({}, test));
To, co się tutaj właściwie dzieje, to to, że jQuery tworzy nowy obiekt z zawartością test
obiektu i rejestruje go (więc nie zmieni się).
Specyficzne rozwiązanie AngularJS (1):
Angular udostępnia copy
funkcję, której można użyć do tego samego efektu:angular.copy
console.log(angular.copy(test));
Funkcja wrappera Vanilla JS:
Oto funkcja, która zawija, console.log
ale tworzy kopię dowolnych obiektów przed ich wylogowaniem.
Napisałem to w odpowiedzi na kilka podobnych, ale mniej solidnych funkcji w odpowiedziach. Obsługuje wiele argumentów i nie będzie próbować kopiować rzeczy, jeśli nie są one zwykłymi obiektami.
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))
}
przykład użycia :consoleLogWithObjectCopy('obj', {foo: 'bar'}, 1, /abc/, {a: 1})