/*
 * 再帰的なオブジェクトのマージ 1 (クロスブラウザ)
 */
var merge = function merge(a, b) {
	for (key in b) {
		if (b.hasOwnProperty(key)) {
			a[key] = (key in a)
				? ((typeof a[key] === "object" && typeof b[key] === "object")
					? merge(a[key], b[key]) : b[key]) : b[key];
		}
	}
	return a;
};

// Usage
var obj = {
	hoge: "hogehoge",
	piyo: [
		"ピヨ",
		"piyopiyo"
	]
};
obj = merge(obj, {test: "hello", piyo: ["piyo"]});

console.log(obj);