Ви можете клонувати масив за допомогою Array#slice
:
console.log(s); // ["bye"], i.e. incorrect
console.log(s.slice()); // ["hi"], i.e. correct
Функція, яку ви можете використовувати замість цієї console.log
, не має цієї проблеми, полягає в наступному:
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);
};
На жаль, у випадку об'єктів, на жаль, найкращим методом видається налагодження спочатку в браузері, що не WebKit, або написання складної функції для клонування. Якщо ви працюєте лише з простими об'єктами, де порядок клавіш не має значення і немає функцій, ви завжди можете робити:
console.logSanitizedCopy = function () {
var args = Array.prototype.slice.call(arguments);
var sanitizedArgs = JSON.parse(JSON.stringify(args));
return console.log.apply(console, sanitizedArgs);
};
Усі ці методи, очевидно, дуже повільні, тому навіть більше, ніж при звичайних console.log
, вам доведеться позбавити їх після того, як ви закінчите налагодження.