バニラJS:
@evanの答えがここにあるようです。JSON.parse / stringifyを(ab)使用して、オブジェクトのコピーを効果的に作成します。
console.log(JSON.parse(JSON.stringify(test)));
jQuery固有のソリューション:
あなたは特定の時点でオブジェクトのスナップショットを作成することができます jQuery.extend
console.log($.extend({}, test));
ここで実際に起こっていることは、jQueryがtest
オブジェクトのコンテンツを使用して新しいオブジェクトを作成し、それをログに記録することです(そのため、オブジェクトは変更されません)。
AngularJS(1)固有のソリューション:
Angularはcopy
同じ効果に使用できる関数を提供します:angular.copy
console.log(angular.copy(test));
バニラJSラッパー関数:
これは、ラップするconsole.log
がログアウトする前にオブジェクトのコピーを作成する関数です。
これは、回答の中のいくつかの類似しているが堅牢ではない関数への応答としてこれを書いたものです。これは、複数の引数をサポートし、なりませんそうでない場合は、物事をコピーしようと定期的なオブジェクト。
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))
}
使用例:consoleLogWithObjectCopy('obj', {foo: 'bar'}, 1, /abc/, {a: 1})