Javascriptで手軽にdeep copyする

下記のように一度JSON.stringify()でjsonの文字列にしてからJSON.parse()でobjectに戻すと
簡易的にdeep copy、つまりcloneできる。

var clonedList = JSON.parse( JSON.stringify(l) );


実装shallow copydeep copyの比較サンプルコード

var list = [0,0,0];
var listForCopy = [0,0,0];
var someStaticClass = {
	f: function (l, callback) {
		// some operations ..
		var shallowCopied = l;
		setTimeout(function () {
			shallowCopied.push(shallowCopied.length);
			callback(shallowCopied);
		}, 500);
	},
	deepCopy:  function (l, callback) {
		// some operations ..
		setTimeout(function () {
			var clonedList = JSON.parse( JSON.stringify(l) ); // deep copy!
			clonedList.push(clonedList.length);
			callback(clonedList);
		}, 1200);
	}
};



someStaticClass.f(list,function(v){
	console.log("first f(): \t"+JSON.stringify(v));	// first f(): 	[0,0,0,3]
	someStaticClass.f(list,function(v){
		console.log("second f(): \t"+JSON.stringify(v)); // second f(): 	[0,0,0,3,4]
		console.log("orginal list : \t"+JSON.stringify(list)); // orginal list : 	[0,0,0,3,4]		
	});
});


someStaticClass.deepCopy(listForCopy,function(v){
		console.log("first deepCopy(): \t"+JSON.stringify(v)); // first deepCopy(): 	[0,0,0,3]	
	someStaticClass.deepCopy(listForCopy,function(v){
		console.log("second deepCopy(): \t"+JSON.stringify(v)); // second deepCopy(): 	[0,0,0,3]
		console.log("orginal listForCopy : \t"+JSON.stringify(listForCopy)); // orginal listForCopy : 	[0,0,0]	
	});
});