Bạn có thể sao chép một mảng với Array#slice
:
console.log(s); // ["bye"], i.e. incorrect
console.log(s.slice()); // ["hi"], i.e. correct
Một chức năng mà bạn có thể sử dụng thay vì console.log
không có vấn đề này như sau:
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);
};
Thật không may, đối với trường hợp của các đối tượng, không may, phương pháp tốt nhất xuất hiện trước tiên là gỡ lỗi với trình duyệt không phải WebKit hoặc viết một hàm phức tạp để sao chép. Nếu bạn chỉ làm việc với các đối tượng đơn giản, trong đó thứ tự các phím không quan trọng và không có chức năng, bạn luôn có thể thực hiện:
console.logSanitizedCopy = function () {
var args = Array.prototype.slice.call(arguments);
var sanitizedArgs = JSON.parse(JSON.stringify(args));
return console.log.apply(console, sanitizedArgs);
};
Tất cả các phương thức này rõ ràng là rất chậm, do đó, thậm chí còn nhiều hơn so với các phương pháp bình thường console.log
, bạn phải loại bỏ chúng sau khi bạn gỡ lỗi xong.