function shallowCopy(object) {
if (object instanceof Date) {
return new Date(+object);
}
var copy = {};
for (var key in object) {
if (object.hasOwnProperty(key)) {
copy[key] = object[key];
}
}
return copy;
}
var a = { x: 1, y: 2, z: [1, 2, 3] };
var b = shallowCopy(a); // b — это отдельный объект
b.x = 10;
console.log(a.x); // 1
// Но a.z и b.z указывают на один и тот же массив:
b.z.push(4);
console.log(a.z); // [1, 2, 3, 4]
var c = new Date(2014, 1, 1);
var d = shallowCopy(c);
d.setFullYear(2015);
console.log(c.getFullYear()); // 2014
ZnVuY3Rpb24gc2hhbGxvd0NvcHkob2JqZWN0KSB7CiAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgRGF0ZSkgewogICAgICAgIHJldHVybiBuZXcgRGF0ZSgrb2JqZWN0KTsKICAgIH0KICAgIHZhciBjb3B5ID0ge307CiAgICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB7CiAgICAgICAgaWYgKG9iamVjdC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7CiAgICAgICAgICAgIGNvcHlba2V5XSA9IG9iamVjdFtrZXldOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBjb3B5Owp9Cgp2YXIgYSA9IHsgeDogMSwgeTogMiwgejogWzEsIDIsIDNdIH07CnZhciBiID0gc2hhbGxvd0NvcHkoYSk7IC8vIGIg4oCUINGN0YLQviDQvtGC0LTQtdC70YzQvdGL0Lkg0L7QsdGK0LXQutGCCmIueCA9IDEwOwpjb25zb2xlLmxvZyhhLngpOyAvLyAxCgovLyDQndC+IGEueiDQuCBiLnog0YPQutCw0LfRi9Cy0LDRjtGCINC90LAg0L7QtNC40L0g0Lgg0YLQvtGCINC20LUg0LzQsNGB0YHQuNCyOgpiLnoucHVzaCg0KTsKY29uc29sZS5sb2coYS56KTsgLy8gWzEsIDIsIDMsIDRdCgp2YXIgYyA9IG5ldyBEYXRlKDIwMTQsIDEsIDEpOwp2YXIgZCA9IHNoYWxsb3dDb3B5KGMpOwpkLnNldEZ1bGxZZWFyKDIwMTUpOwpjb25zb2xlLmxvZyhjLmdldEZ1bGxZZWFyKCkpOyAvLyAyMDE0