Vanilla JS:
@ jawaban evan sepertinya yang terbaik di sini. Cukup (ab) gunakan JSON.parse / stringify untuk secara efektif membuat salinan objek.
console.log(JSON.parse(JSON.stringify(test)));
Solusi spesifik JQuery:
Anda dapat membuat snapshot objek pada titik waktu tertentu dengan jQuery.extend
console.log($.extend({}, test));
Apa yang sebenarnya terjadi di sini adalah jQuery adalah membuat objek baru dengan test
konten objek, dan mencatatnya (sehingga tidak akan berubah).
AngularJS (1) solusi spesifik:
Angular menyediakan copy
fungsi yang dapat digunakan untuk efek yang sama:angular.copy
console.log(angular.copy(test));
Fungsi bungkus Vanilla JS:
Berikut adalah fungsi yang membungkus console.log
tetapi akan membuat salinan dari setiap benda sebelum log mereka keluar.
Saya menulis ini sebagai jawaban atas beberapa fungsi yang serupa tetapi kurang kuat dalam jawabannya. Ini mendukung banyak argumen, dan tidak akan mencoba untuk menyalin sesuatu jika mereka bukan objek biasa .
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))
}
contoh penggunaan :consoleLogWithObjectCopy('obj', {foo: 'bar'}, 1, /abc/, {a: 1})