Anda dapat mengkloning sebuah array dengan Array#slice
:
console.log(s); // ["bye"], i.e. incorrect
console.log(s.slice()); // ["hi"], i.e. correct
Fungsi yang dapat Anda gunakan sebagai ganti console.log
yang tidak memiliki masalah ini adalah sebagai berikut:
console.logShallowCopy = function () {
function slicedIfArray(arg) {
return Array.isArray(arg) ? arg.slice() : arg;
}
var argsSnapshot = Array.prototype.map.call(arguments, slicedIfArray);
return console.log.apply(console, argsSnapshot);
};
Untuk kasus objek, sayangnya, metode terbaik tampaknya men-debug terlebih dahulu dengan browser non-WebKit, atau menulis fungsi rumit untuk dikloning. Jika Anda hanya bekerja dengan objek sederhana, di mana urutan tombol tidak menjadi masalah dan tidak ada fungsi, Anda selalu dapat melakukan:
console.logSanitizedCopy = function () {
var args = Array.prototype.slice.call(arguments);
var sanitizedArgs = JSON.parse(JSON.stringify(args));
return console.log.apply(console, sanitizedArgs);
};
Semua metode ini jelas sangat lambat, jadi bahkan lebih daripada dengan metode normal console.log
, Anda harus menghapusnya setelah Anda selesai debugging.